精华内容
下载资源
问答
  • WinAPI

    2016-06-03 11:24:44
    常用的winAPI.1.MessageBoxMSDN:实例记

    常用的winAPI.

    1.MessageBox

    MSDN:

    实例

    展开全文
  • WINAPI

    千次阅读 2009-08-21 09:25:00
    今天读程序的时候看到一个函数这样写:bool WINAPI ConsoleCtrlHandler(DWORD);对这个WINAPI的意思不太明白,就上网找了一些关于这个名词的解释。就当做做笔记了。 WINAPI的定义见windef.h这个头文件其定义是这样的...

    今天读程序的时候看到一个函数这样写:bool WINAPI ConsoleCtrlHandler(DWORD);

    对这个WINAPI的意思不太明白,就上网找了一些关于这个名词的解释。就当做做笔记了。

     

    WINAPI的定义见windef.h这个头文件其定义是这样的:

    #define WINAPI _stdcall

     

    CALLBACK函数也是这样定义的,CALLBACK是一个回调函数。

     

    _stdcall:

    1. 进行函数调用,函数参数的入栈方式是最右边先入栈。//即:压栈顺序:从右至左。

    2. 同时_stdcall规定,调用者负责栈的回收。               //即:清栈:被调用函数负责清空,成为callee cleanup。

     

     

    附录:

    Microsoft函数调用约定

    对于所有调用共有的约定:ebx、ebp、esi、edi都是calle-save,即由被调用的函数负责它们的保存(如果被调用函数用到了这些寄存器的话)
    先看函数调用发生了什么:(win32下)
    1、所有参数提升到4bytes的倍数
    2、执行call指令
    3、将ebx、ebp、esi、edi保存在栈上,这一步称为function prolog
    4、将返回值放在eax中(返回int64放在edx:eax中,返回double放在浮点寄存器中。复杂的数据结构在caller的栈中分配空间,将首地址做为最后压栈的参数(我拿__cdecl试的),callee返回的时候将返回值放在这个指针指向的地址)
    5、取出ebx、ebp、esi、edi,这一步称为function epilog
    6、清空栈,保持堆栈平衡,这一步称为stack cleanup  //这部分内容可能涉及到了数据结构和微机原理,有这些知识可能才能充分理解

     

    具体的调用约定:
    1、__cdecl
    压栈顺序:从右至左
    清栈:函数调用者负责清空,称为caller cleanup
    名字修饰(name decoration):在函数名前加上下划线做前缀,比如_foo
    注:c/c++函数的缺省调用约定

    2、__stdcall
    压栈顺序:从右至左
    清栈:被调用函数负责清空,称为callee cleanup
    名字修饰:在函数名前加上下划线做前缀,名字后用@加上函数参数大小做后缀,如_foo@8
    注:WINAPI就是__stdcall的#define

    3、__fastcall
    压栈顺序:第一个参数放在ecx,第二个参数放在edx,其余从右至左
    清栈:callee cleanup
    名字修饰:在函数名前加上@做前缀,名字后用@加上函数参数大小做后缀,如@foo@8
    注:名字叫fast实际就不一定了……

    4、thiscall
    压栈顺序:this指针(cpp非静态成员函数特有)放在ecx,其余从右至左
    清栈:callee cleanup
    注:cpp非静态成员函数默认的调用约定

    5、naked
    压栈顺序:从右至左
    清栈:caller cleanup
    注:VxDs用的调用约定,将__declspec(naked)写在函数定义处(注意,不是声明)

    //上面的内容如果想完全理解的话,必须在程序中多加练习才可以

     

    这就是我找到的关于WINAPI的一些资料,可能不太全面而且很杂。但是看完还是能了解WINAPI的大体意思

    展开全文
  • Fix winapi

    2020-11-23 00:44:24
    <p>1- <code>execute_winapi</code> now accepts a function <code>FnMut() -> Result<()>, which is <pre><code>rust || { write!($writer, "{}", command.ansi_code())?; // winapi doesn'...
  • Update winapi

    2020-12-05 04:22:44
    <div><p>Don't merge until I publish a new version of <code>winapi</code>.</p><p>该提问来源于开源项目:RustAudio/cpal</p></div>
  • winAPI的-源码

    2021-02-13 12:31:38
    “#winAPI
  • winapi祖玛游戏

    2018-10-16 10:26:29
    VS2017,winapi项目,祖玛游戏,消除的时候是按自己写的,有点小问题,可以运行。
  • WINAPI WinMain

    2016-04-13 23:19:22
    WINAPI WinMain用法

    #include <windows.h>
    #include <stdio.h>

    LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nShowCmd)
    {
     WNDCLASS wc;
     wc.style =  CS_VREDRAW|CS_HREDRAW ;
     wc.lpfnWndProc = WndProc;
     wc.cbClsExtra = 0;
     wc.cbWndExtra = 0;
     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);
     wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
     wc.hCursor = LoadCursor(NULL,IDC_ARROW);
     wc.hInstance = hInstance;
     wc.lpszClassName = "mainwindow";
     wc.lpszMenuName = NULL;
     if(!RegisterClass(&wc))
     {
      MessageBeep(0);
      return FALSE;
     }

     HWND hwnd;
     hwnd = CreateWindow(
      "mainwindow",
      NULL,
      WS_OVERLAPPED /*WS_POPUP | WS_VISIBLE*/,
      0,0,500,400,
      NULL,
      NULL,
      hInstance,
      NULL
      );

     ShowWindow(hwnd,nShowCmd);
     UpdateWindow(hwnd);

     MSG uMsg;
     while(GetMessage(&uMsg,hwnd,0,0))
     {
      TranslateMessage(&uMsg);
      DispatchMessage(&uMsg);
     }

     return uMsg.wParam;
    }

    LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
     switch(uMsg)
     {
     //case WM_PAINT:
     // break;
     //case WM_KEYDOWN:
     // break;
     case WM_DESTROY:
      DestroyWindow(hwnd);
      break;
     default:
      return DefWindowProc(hwnd,uMsg,wParam,lParam);
     }
     return 0;
    }

    #include<windows.h>

    LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);//窗口消息处理函数

    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow){ 
        HWND hwnd; 
     MSG Msg; 
     WNDCLASS wndclass;
     char lpszClassName[]="test";//窗口类名,实际没有意义 
     char lpszTitle[]="我的程序";//应用程序的窗口名 
     //LPCTSTR lpszClassName = TEXT("MyApp");
     //LPCTSTR lpszTitle = TEXT("My Application");
     hi=hInstance;//应用程序实例句柄可以在全局使用 
     
     /// 
     //窗口类型设置/ 
     /// 
     wndclass.style=0;//窗口类型 
     wndclass.lpfnWndProc=WndProc;//窗口处理函数 
     wndclass.cbClsExtra=0;//窗口类扩展 
     wndclass.cbWndExtra=0;//窗口实例扩展 
     wndclass.hInstance=hInstance;//当前实例句柄 
     wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//最小化图标 
     wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//光标 
     wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);//背景 
     //wndclass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
     wndclass.lpszMenuName=NULL;//菜单 
     wndclass.lpszClassName=lpszClassName;//窗口类名 
     /// 
     ///窗口类注册// 
     /// 
     if(!RegisterClass(&wndclass)) { 
      MessageBeep(0); 
      return FALSE; 
     } 
     /// 
     ///创建窗口返回句柄 
     /// 
     hwnd=CreateWindow( 
      lpszClassName,//窗口类名 
      lpszTitle,//标题名 
      WS_OVERLAPPEDWINDOW,//窗口风格 
      CW_USEDEFAULT,//左上角坐标 
      CW_USEDEFAULT, 
      CW_USEDEFAULT,//高和宽的大小 
      CW_USEDEFAULT, 
      NULL, 
      NULL, 
      hInstance,//创建窗口的应用程序句柄 
      NULL 
      ); 
     hw=hwnd;//可以在全局使用 
     /// 
     //显示窗口,进入消息循环/// 
     /// 
     ShowWindow(hwnd,nCmdShow); 
     UpdateWindow(hwnd); 
     while(GetMessage(&Msg,NULL,0,0)) { 
      TranslateMessage(&Msg); 
      DispatchMessage(&Msg); 
     } 
     return Msg.wParam; 
    }

    LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)//窗口消息处理函数 
    { switch(message) 

    case WM_DESTROY: 
    PostQuitMessage(0); 
    default: 
    return DefWindowProc(hwnd,message,wParam,lParam); 

    return (0); 
    }



    其中括号中参数表示的意思如下:

    1.cbSize:
    WNDCLASSEX 的大小。我们可以用sizeof(WNDCLASSEX)来获得准确的值。
    2.style:
    从这个窗口类派生的窗口具有的风格。您可以用“or”操作符来把几个风格或到一起。
    3.lpfnWndProc:
    窗口处理函数的指针。
    4.cbClsExtra:
    指定紧跟在窗口类结构后的附加字节数。
    5.cbWndExtra:
    指定紧跟在窗口实例的附加字节数。如果一个应用程序在资源中用CLASS伪指令注册一个对话框类时,则必须把这个成员设成DLGWINDOWEXTRA。
    6.hInstance:
    本模块的实例句柄。
    7.hIcon:
    图标的句柄。
    8.hCursor:
    光标的句柄。
    9.hbrBackground:
    背景画刷的句柄。
    10.lpszMenuName:
    指向菜单的指针。
    11.lpszClassName:
    指向类名称的指针。
    12.hIconSm:
    窗口类关联的小图标。如果该值为NULL。则把hIcon中的图标转换成大小合适的小图标。

    展开全文
  • I was trying to write some python code that requires calls to native WINAPI functions. At first I came across the pypiwin32 package. Then, somewhere on the internet I saw someone using the _winapi mod...

    I was trying to write some python code that requires calls to native WINAPI functions. At first I came across the pypiwin32 package. Then, somewhere on the internet I saw someone using the _winapi module. I found no proper documentation for this module, only this link to cpython's GitHub page.

    Is this a cpython-specific module? That is, is it not guaranteed that other implementations have this module?

    Do I need the pypiwin32 package if the functions I need are already implemented in the _winapi module?

    解决方案

    It seems _winapi is specific to CPython and was added in python 3.3 under Issue 11750.

    See Modules/_winapi.c which was added by this commit

    This fits with the following observed behaviour:

    python 2.x - 3.2 import _winapi fails with ImportError

    python 3.3+ import _winapi works fine

    Relying upon _winapi is a bad idea as it's undocumented and CPython-specific.

    展开全文
  • WINAPI

    千次阅读 2016-12-19 10:26:22
    为什么要使用WINAPI宏?  看看上面的举例,在函数前加了一个WINAPI宏。这一点很重要,它直接关系着函数输出什么样子的修饰名,使用WINAPI宏的TestAdd函数,对应的输出修饰名就是“?TestAdd@@YGHHH@Z”。  为什么要...
  • 临时Windows WinAPI挂钩
  • s pretend that winapi defines a function and an interface like: <pre><code>rust fn DoStuff(pRetVal: *mut *mut ISomeInterface) -> HRESULT; RIDL!{#[uuid(...)] interface ISomeInterface...
  • winapi_vscode.rar

    2020-03-11 18:27:43
    Github链接:https://github.com/JamesHoi/winapi_vscode 通过Visual Studio Code编写c++ winapi程序范例
  • fix_winapi

    2020-11-22 12:30:04
    <p>1- <code>execute_winapi</code> now accepts a <code>&mut dyn std::io::Write</code> which is only used with <code>Print</code> command <p>2- <code>Print</code> command flushes the writer in case ...
  • WinAPI cleanup

    2021-01-06 16:49:21
    <div><p>Explicit signatures for WinAPI calls. Move local declarations of external Win API funcs from HwndWrapper to win32functions Always call GetWindowThreadProcessId with proper HWND type instead of...
  • DWORD WINAPI

    万次阅读 2014-11-27 14:23:18
    DWORD WINAPI Zhaa(LPVOID PP) 查看WINAPI的定义,它是这样定义的 #define WINAPI _stdcall 可以发现CALLBACK也是这样定义的 _stdcall规定了编译时的一些选项WINAPI是一个宏,所代表的符号是__stdcall, 函数名前...
  • winapi-rpg-2d-源码

    2021-02-10 20:29:02
    Winapi的RPG 2D
  • 易语言WINAPI转API声明源码,WINAPI转API声明,signvar,WinTypesToE,Loadlib,GetLibFileName,DelComment,Replace,GetRealc,WINAPI2E,STRUCT2E,CALLBACK2E,文本_删首尾字符,文本_取空格前文本,文本_取空格后文本,路径_...
  • Upgrade to winapi 0.3

    2020-11-27 13:06:48
    <div><p>This PR is to move away from legacy winapi 0.2 and related *-sys crates to winapi 0.3.x. Note, this is currently using my git branch iphlpapi as required changes have not yet been merged into ...
  • Qt4.7通过WinApi获取串口号Qt4.7通过WinApi获取串口号Qt4.7通过WinApi获取串口号Qt4.7通过WinApi获取串口号Qt4.7通过WinApi获取串口号
  • WINAPI.CHM

    2012-03-12 16:29:37
    快手编程语言 winapi.chm 帮助文档
  • 易语言模块WinAPI_窗口与组件.rar 易语言模块WinAPI_窗口与组件.rar 易语言模块WinAPI_窗口与组件.rar 易语言模块WinAPI_窗口与组件.rar 易语言模块WinAPI_窗口与组件.rar 易语言模块WinAPI_窗口与组件.rar
  • WinAPI开发Win32 API开发尽可能快和尽可能清晰的方法教你开始Win32 API开发Win32 API开发Win32 API即为Microsoft 32位平台的应用程序编程接口(Application Programming Interface)。所有在Win32平台上运行的应用程序...
  • Is winapi abandoned?

    2020-11-26 22:39:07
    <div><p>Hasn't been any commits or merges for 4 months or so, and quite a few important pending pull requests.</p><p>该提问来源于开源项目:retep998/winapi-rs</p></div>
  • 02:00] ERROR [src\system\win\api.rs:53] WINAPI ERROR: The operation completed successfully. [2020-11-11 12:57:45.365022 +02:00] DEBUG [src\event_handler\winevent.rs:38] Show(false): '...
  • Port to winapi 0.3

    2021-01-11 07:06:17
    <div><p>Worked around the lacking <code>Debug</code> derives using <code>derivative</code> crates and ignore the relevant winapi structs. Most work was finding the relevant new type locations, shouldn...
  • 主要介绍了使用winapi安装Windows服务示例,大家参考使用吧
  • Make winapi optional.

    2020-12-09 04:31:35
    <div><p>Currently, the <code>winapi</code> crate is mandatory. But it's very big (100MB). This patch makes it optional by introducing the <code>win32-surface</code> feature.</p><p>该提问来源于开源...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,704
精华内容 4,681
关键字:

winapi