線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:7591
推到 Plurk!
推到 Facebook!

PostMessage用法請教各位先進!

答題得分者是:axsoft
ss0510
一般會員


發表:6
回覆:11
積分:3
註冊:2002-06-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-06 07:53:01 IP:218.32.xxx.xxx 未訂閱
HWND Handle1=FindWindow(0,"小算盤"); if(Handle1!=NULL) { PostMessage(Handle1,WM_CHAR,VK_NUMPAD6,0) } 請問各位在以上程式裡傳送數字6到小算盤裡!但....小算盤卻沒動作? 為何會這樣啊? 還是我的方法錯誤! 感謝你的教導!
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-06 08:34:39 IP:61.218.xxx.xxx 未訂閱
引言: HWND Handle1=FindWindow(0,"小算盤"); if(Handle1!=NULL) { PostMessage(Handle1,WM_CHAR,VK_NUMPAD6,0) } 請問各位在以上程式裡傳送數字6到小算盤裡!但....小算盤卻沒動作? 為何會這樣啊? 還是我的方法錯誤! 感謝你的教導!
改成這樣試試 < class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { HWND Handle1=FindWindow(0,"小算盤"); if(Handle1!=NULL) { PostMessage(Handle1,WM_KEYDOWN,VK_NUMPAD6,0); } } Delphi.Ktop風紀小隊---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/05/06 09:24:17
ss0510
一般會員


發表:6
回覆:11
積分:3
註冊:2002-06-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-06 11:25:04 IP:218.32.xxx.xxx 未訂閱
HWND Handle1=FindWindow(0,"未命名 - 記事本"); if(Handle1!=NULL)   {    ShowMessage("1"); //測試是否有進來用!    PostMessage(Handle1,WM_KEYDOWN,VK_S,0);   }    不好意思!版主!在請問一下! 換成以上時!BCB會說,VK_S未下定義! 我把WM_KEYDOWN 換成WM_CHAR也一樣也! 麻煩你幫幫忙~
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-06 16:15:49 IP:61.218.xxx.xxx 未訂閱
引言: HWND Handle1=FindWindow(0,"未命名 - 記事本"); if(Handle1!=NULL) { ShowMessage("1"); //測試是否有進來用! PostMessage(Handle1,WM_KEYDOWN,VK_S,0); } 不好意思!版主!在請問一下! 換成以上時!BCB會說,VK_S未下定義! 我把WM_KEYDOWN 換成WM_CHAR也一樣也! 麻煩你幫幫忙~ < face="Verdana, Arial, Helvetica"> 在Winuser.h中並未定義VK_S,需自行定義 以下是各別的範圍給您參考!
VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
Delphi.Ktop風紀小隊---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/05/06 16:18:00
ss0510
一般會員


發表:6
回覆:11
積分:3
註冊:2002-06-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-06 16:41:58 IP:218.32.xxx.xxx 未訂閱
版主大大:             我有照你說的一樣,去WINUSER.H裡面去定義了!             但是還是無法傳數字或是A到Z的文字到記事本裡面去,             請問這是為何呢?                                拜託!拜託! 幫幫忙啦! 
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-06 17:43:51 IP:61.218.xxx.xxx 未訂閱
引言: 版主大大: 我有照你說的一樣,去WINUSER.H裡面去定義了! 但是還是無法傳數字或是A到Z的文字到記事本裡面去, 請問這是為何呢? 拜託!拜託! 幫幫忙啦! >< face="Verdana, Arial, Helvetica"> 以上的方法是模擬小算盤Function Key,如果你要對記事本輸入文字需改用
VOID keybd_event(        BYTE bVk,        // virtual-key code
    BYTE bScan,        // hardware scan code
    DWORD dwFlags,        // flags specifying various function options
    DWORD dwExtraInfo         // additional data associated with keystroke
   );
試試! Delphi.Ktop風紀小隊---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/05/06 17:46:13
Cooky Kid
初階會員


發表:5
回覆:68
積分:44
註冊:2002-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-06 17:48:21 IP:211.76.xxx.xxx 未訂閱
引言: 我有照你說的一樣,去WINUSER.H裡面去定義了! 但是還是無法傳數字或是A到Z的文字到記事本裡面去, 請問這是為何呢? PS:真是奇怪!小算盤就可以!記事本不行?
複製文魁一本API書的範例, 應該可以給你一點幫助.... ><>> < class="code"> //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ComCtrls.hpp> #include <ToolWin.hpp> //執行 ShellExecute API函式-------------------------------------------------- #include <shellapi.h> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TToolBar *ToolBar1; TButton *Button1; TStaticText *StaticText1; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif Unit1.cpp
//---------------------------------------------------------------------------
//目的:開啟另一程式,並模擬鍵盤輸入多行字串
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//搜尋<記事本>有無開啟
HWND Npad = ::FindWindow(NULL, "未命名 - 記事本");
//若<記事本>在開啟中,即帶到最前面
if(::ShowWindow(Npad,SW_SHOWNORMAL))
   {
   ::BringWindowToTop(Npad);
   }
else //若沒開啟,則開啟<記事本>
   {
   //取得Window目錄位置
   char WinDir[MAX_PATH];
   ::GetWindowsDirectory(WinDir, MAX_PATH);
   AnsiString sysdir = AnsiString(WinDir)   "\\Notepad.exe";
   //開啟<記事本>
   ::ShellExecute(NULL,"open",sysdir.c_str(),NULL,NULL,SW_SHOWNORMAL);
   }
//完全開啟<記事本>後,才送出特定文字
Sleep(100);
int x=0;
while(x<10)
   {
   for(int i = 'A'; i <= 'Z'; i  )
      {
      //從 a 至 z
      keybd_event((char)i, 0, 0, 0);
      keybd_event((char)i, 0, KEYEVENTF_KEYUP, 0);
      //從 ! 至 )
      int c = x   '0';
      keybd_event(VK_SHIFT, 0, 0, 0);
      keybd_event((char)c, 0, 0, 0);
      keybd_event((char)c, 0, KEYEVENTF_KEYUP, 0);
      keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
      }
   //每完成A至Z 一次循環,則換新一行
   keybd_event(VK_RETURN, 0, 0, 0);
   keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
   x  ;
   }
}
//---------------------------------------------------------------------------
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-06 17:50:10 IP:61.218.xxx.xxx 未訂閱
這是C++ Builder & Windows API一書中的範例,可以買一本當參考書,挺不錯的喔!    以下程式碼歸文魁資訊股份公司所有    
//---------------------------------------------------------------------------
//目的:開啟另一程式,並模擬鍵盤輸入多行字串
//---------------------------------------------------------------------------
#include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//搜尋<記事本>有無開啟
HWND Npad = ::FindWindow(NULL, "未命名 - 記事本");
//若<記事本>在開啟中,即帶到最前面
if(::ShowWindow(Npad,SW_SHOWNORMAL))
   {
   ::BringWindowToTop(Npad);
   }
else //若沒開啟,則開啟<記事本>
   {
   //取得Window目錄位置
   char WinDir[MAX_PATH];
   ::GetWindowsDirectory(WinDir, MAX_PATH);
   AnsiString sysdir = AnsiString(WinDir) + "\\Notepad.exe";
   //開啟<記事本>
   ::ShellExecute(NULL,"open",sysdir.c_str(),NULL,NULL,SW_SHOWNORMAL);
   }
//完全開啟<記事本>後,才送出特定文字
Sleep(100);
int x=0;
while(x<10)
   {
   for(int i = 'A'; i <= 'Z'; i++)
      {
      //從 a 至 z
      keybd_event((char)i, 0, 0, 0);
      keybd_event((char)i, 0, KEYEVENTF_KEYUP, 0);
      //從 ! 至 )
      int c = x + '0';
      keybd_event(VK_SHIFT, 0, 0, 0);
      keybd_event((char)c, 0, 0, 0);
      keybd_event((char)c, 0, KEYEVENTF_KEYUP, 0);
      keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
      }
   //每完成A至Z 一次循環,則換新一行
   keybd_event(VK_RETURN, 0, 0, 0);
   keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
   x++;
   }
}
//---------------------------------------------------------------------------
Delphi.Ktop風紀小隊---[ 發問前請先找找舊文章 ]---
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-06 17:56:31 IP:61.218.xxx.xxx 未訂閱
哇!幾乎跟Cooky Kid同時Post出範例,可惜天使把刪文章的功能關了! 不然我就可以刪掉我多Post的文章了!     Delphi.Ktop風紀小隊---[ 發問前請先找找舊文章 ]---
Cooky Kid
初階會員


發表:5
回覆:68
積分:44
註冊:2002-07-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-06 18:02:09 IP:211.76.xxx.xxx 未訂閱
引言: 換成以上時!BCB會說,VK_S未下定義! 我把WM_KEYDOWN 換成WM_CHAR也一樣也!
請注意下面程式碼的 W 鍵是如何自行定義的... enjoy it!!!!
//---------------------------------------------------------------------------
//目的:設定鍵盤組合鍵,即將滑鼠移至指定位置,並模擬按下滑鼠左鍵執行功能
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//將 VK_W 定義成 W 鍵值------------------------------------------------------
#define VK_W 0x57 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
//清除Memo1中文字
Memo1->Text = "";
//在Memo1中新增150行文字
char a[26];
for(int x=65;x<91;x  )
    a[x-65] = char(x);
for(int i=1; i<151; i  )
    Memo1->Lines->Add("第 " AnsiString(i) " 行_ " AnsiString(a));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1KeyPress(TObject *Sender, char &Key)
{
//當組合鍵相等於Ctrl W 鍵是按下狀態
//則可進行相關功能改變
if(::GetKeyState(VK_CONTROL) && ::GetKeyState(VK_W))
  {
  //將滑鼠移至Memo1的右下角ScrollBar位置
  POINT p = { Memo1->Left Memo1->Width-10, Memo1->Top Memo1->Height-10};
  p = ClientToScreen(p);
  ::SetCursorPos(p.x,p.y);
  //模擬按下滑鼠左鍵一次
  ::mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
  ::mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );
  }
}
//---------------------------------------------------------------------------
Cooky Kid
初階會員


發表:5
回覆:68
積分:44
註冊:2002-07-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-06 18:13:30 IP:211.76.xxx.xxx 未訂閱
呵~~~~~~ axsoft版主大大, 小弟手頭上正好翻著© "C++ Builder & Windows API範例辭典"範例... 順手就C & P 了.....您也是嗎? 再次聲明: 小弟所post程式碼『以上程式碼歸文魁資訊股份公司所有』
ss0510
一般會員


發表:6
回覆:11
積分:3
註冊:2002-06-19

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-06 20:34:18 IP:218.32.xxx.xxx 未訂閱
感謝兩位大大相助!  這就去試試! 晚點在POST心得出來! 那書 小弟晚上去書局找找!< > 是該好好在去書局買些書好好進補一下了!< >
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-05-07 08:40:07 IP:61.218.xxx.xxx 未訂閱
引言: 呵~~~~~~ axsoft版主大大, 小弟手頭上正好翻著© "C++ Builder & Windows API範例辭典"範例... 順手就C & P 了.....您也是嗎? 再次聲明: 小弟所post程式碼『以上程式碼歸文魁資訊股份公司所有』 < face="Verdana, Arial, Helvetica"> 因為整本書有看完了!映象中有這類的範例,信手翻來就看見了! < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=9258866&CC=207074"> Delphi.Ktop風紀小隊---[ 發問前請先找找舊文章 ]---
系統時間:2024-03-28 23:57:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!