惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

博客园 - tecsun

Base64 Encode and Decode - BCB[转] BCB 控制 Excel类[转] char * 与 wchar_t *(BSTR) 转换 Borland IDE 常用热键简介 WINXP总是默认以Administrator登陆系统,怎样让自建用户启动 [轉]MD5算法(C++实现) [轉]MYSQL 字符集问题 [轉]mysql多种存储引擎及特点 MySQL date/time 不能转换为 System.DateTime的问题[VS2005(C#)+mysql] mysql 相关 [转]写得蛮好的linux学习笔记 VS2005中使用mysql 在ubuntu下使用qq[转] [轉自ccrun by dewbow ] BCB和TTS5.1做中文语音 分割字符串(BCB)(從文本文檔中取出需要的字符串) [C++]BCD碼轉換問題 [轉]我们必须了解的8个dos命令(转自http://www.hxblog.net/article.asp?id=491) [C#][轉]字符转ASCII码,ASCII码转字符 [轉]窗口句柄的获得
控制外部應用程式的一些記錄(C++)
tecsun · 2006-12-29 · via 博客园 - tecsun

最近在做一個小項目要用到調用外部應用程式.
通過查資料和實踐,給自己留個記錄,以便以後察看.

主要還是調用windows内部API函數來實現一些操作。
這裡用一個ShellExecute的系統函數來調用可執行檔。
String SPZExeFile = "d:\xx\\xxx\\xxxx.exe"  ;
 try{
 ShellExecute( Handle , "open" , SPZExeFile.c_str() , NULL , NULL ,SW_SHOW );
 }catch(...){
    ShowMessage("您要調用的檔不存在或者發生異常!") ;
 }

下一步是要獲得該可執行檔的句柄
 HANDLE DestHandle;
DestHandle = FindWindow(NULL,"該可執行檔標題欄名");

獲得到該可執行檔的句柄后,下部就是如何控制該執行檔,現在對我還是個難點。
現在只會發送一些簡單系統消息。
關閉該可執行檔:
 if (DestHandle!=0) {
     PostMessage(DestHandle, WM_CLOSE, 0, 0);
    }
發組合鍵消息(對於該可執行檔有快捷鍵操作的有傚,相當於手動按該按鈕)
以ALT+O為例:
       PostMessage(DestHandle,WM_KEYDOWN,VK_MENU,0);   //按下ALT鍵
       PostMessage(DestHandle,WM_KEYDOWN,0x4F ,0);            //按下O鍵
       PostMessage(DestHandle,WM_KEYUP,0x4F,0);                    //放開O鍵
       PostMessage(DestHandle,WM_KEYUP,VK_MENU,0);         //放開ALT鍵

下面還得繼續努力研究咯,任務還沒完成啊^_^.

[]各鍵值的ASCII碼
 #define   VK_LBUTTON                 0x01  
  #define   VK_RBUTTON                 0x02  
  #define   VK_CANCEL                   0x03  
  #define   VK_MBUTTON                 0x04         /*   NOT   contiguous   with   L   &   RBUTTON   */  
   
  #define   VK_BACK                       0x08  
  #define   VK_TAB                         0x09  
   
  #define   VK_CLEAR                     0x0C  
  #define   VK_RETURN                   0x0D  
   
  #define   VK_SHIFT                     0x10  
  #define   VK_CONTROL                 0x11  
  #define   VK_MENU                       0x12  
  #define   VK_PAUSE                     0x13  
  #define   VK_CAPITAL                 0x14  
   
  #define   VK_KANA                       0x15  
  #define   VK_HANGEUL                 0x15     /*   old   name   -   should   be   here   for   compatibility   */  
  #define   VK_HANGUL                   0x15  
  #define   VK_JUNJA                     0x17  
  #define   VK_FINAL                     0x18  
  #define   VK_HANJA                     0x19  
  #define   VK_KANJI                     0x19  
   
  #define   VK_ESCAPE                   0x1B  
   
  #define   VK_CONVERT                 0x1C  
  #define   VK_NONCONVERT           0x1D  
  #define   VK_ACCEPT                   0x1E  
  #define   VK_MODECHANGE           0x1F  
   
  #define   VK_SPACE                     0x20  
  #define   VK_PRIOR                     0x21  
  #define   VK_NEXT                       0x22  
  #define   VK_END                         0x23  
  #define   VK_HOME                       0x24  
  #define   VK_LEFT                       0x25  
  #define   VK_UP                           0x26  
  #define   VK_RIGHT                     0x27  
  #define   VK_DOWN                       0x28  
  #define   VK_SELECT                   0x29  
  #define   VK_PRINT                     0x2A  
  #define   VK_EXECUTE                 0x2B  
  #define   VK_SNAPSHOT               0x2C  
  #define   VK_INSERT                   0x2D  
  #define   VK_DELETE                   0x2E  
  #define   VK_HELP                       0x2F  
   
  /*   VK_0   thru   VK_9   are   the   same   as   ASCII   '0'   thru   '9'   (0x30   -   0x39)   */  
  /*   VK_A   thru   VK_Z   are   the   same   as   ASCII   'A'   thru   'Z'   (0x41   -   0x5A)   */  
   
  #define   VK_LWIN                       0x5B  
  #define   VK_RWIN                       0x5C  
  #define   VK_APPS                       0x5D  
   
  #define   VK_NUMPAD0                 0x60  
  #define   VK_NUMPAD1                 0x61  
  #define   VK_NUMPAD2                 0x62  
  #define   VK_NUMPAD3                 0x63  
  #define   VK_NUMPAD4                 0x64  
  #define   VK_NUMPAD5                 0x65  
  #define   VK_NUMPAD6                 0x66  
  #define   VK_NUMPAD7                 0x67  
  #define   VK_NUMPAD8                 0x68  
  #define   VK_NUMPAD9                 0x69  
  #define   VK_MULTIPLY               0x6A  
  #define   VK_ADD                         0x6B  
  #define   VK_SEPARATOR             0x6C  
  #define   VK_SUBTRACT               0x6D  
  #define   VK_DECIMAL                 0x6E  
  #define   VK_DIVIDE                   0x6F  
  #define   VK_F1                           0x70  
  #define   VK_F2                           0x71  
  #define   VK_F3                           0x72  
  #define   VK_F4                           0x73  
  #define   VK_F5                           0x74  
  #define   VK_F6                           0x75  
  #define   VK_F7                           0x76  
  #define   VK_F8                           0x77  
  #define   VK_F9                           0x78  
  #define   VK_F10                         0x79  
  #define   VK_F11                         0x7A  
  #define   VK_F12                         0x7B  
  #define   VK_F13                         0x7C  
  #define   VK_F14                         0x7D  
  #define   VK_F15                         0x7E  
  #define   VK_F16                         0x7F  
  #define   VK_F17                         0x80  
  #define   VK_F18                         0x81  
  #define   VK_F19                         0x82  
  #define   VK_F20                         0x83  
  #define   VK_F21                         0x84  
  #define   VK_F22                         0x85  
  #define   VK_F23                         0x86  
  #define   VK_F24                         0x87  
   
  #define   VK_NUMLOCK                 0x90  
  #define   VK_SCROLL                   0x91  
   
  /*  
    *   VK_L*   &   VK_R*   -   left   and   right   Alt,   Ctrl   and   Shift   virtual   keys.  
    *   Used   only   as   parameters   to   GetAsyncKeyState()   and   GetKeyState().  
    *   No   other   API   or   message   will   distinguish   left   and   right   keys   in   this   way.  
    */  
  #define   VK_LSHIFT                   0xA0  
  #define   VK_RSHIFT                   0xA1  
  #define   VK_LCONTROL               0xA2  
  #define   VK_RCONTROL               0xA3  
  #define   VK_LMENU                     0xA4  
  #define   VK_RMENU                     0xA5  
   
  #if(WINVER   >=   0x0400)  
  #define   VK_PROCESSKEY           0xE5  
  #endif   /*   WINVER   >=   0x0400   */  
   
  #define   VK_ATTN                       0xF6  
  #define   VK_CRSEL                     0xF7  
  #define   VK_EXSEL                     0xF8  
  #define   VK_EREOF                     0xF9  
  #define   VK_PLAY                       0xFA  
  #define   VK_ZOOM                       0xFB  
  #define   VK_NONAME                   0xFC  
  #define   VK_PA1                         0xFD  
  #define   VK_OEM_CLEAR             0xFE   ctrl(VK_CONTROL):0x11,十进制:17  
  alt(VK_MENU):0x12,十进制:18  
  用GetAsyncKeyState()   和   GetKeyState()还可以得到左右区别:  
  左CTRL:0xA2(162)  
  右CTRL:0xA3(163)  
  左Alt:0xA4(164)  
  右Alt:0xA5(165)