12. februar 2011 - 22:11Der er
11 kommentarer og 1 løsning
PostMessage returnere 1, men virker ikke?
Jeg prøver at konvertere noget VB til C#, men er rendt ind i et problem. Jeg laver et PostMessage call til at musen skal klikke et bestemt sted. PostMessage returnere 1, men intet sker? Lad mig vise noget kodning, så kan i måske få øje på problemet.
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer Public Const WM_KEYDOWN = &H100 Public Const WM_KEYUP = &H101 Public Const WM_CHAR = &H102 Private Const WM_LBUTTONDOWN = &H201 Private Const WM_LBUTTONUP = &H202
Har jeg konverteret til:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam); public const Int32 WM_KEYDOWN = 0x0100; public const Int32 WM_KEYUP = 0x0101; public const Int32 WM_CHAR = 0x0102; private const Int32 WM_LBUTTONDOWN = 0x0201; private const Int32 WM_LBUTTONUP = 0x0202;
Og:
PostMessage(handle, WM_LBUTTONDOWN, 1, (y << 16) Or x)
Jeg har også prøvet at sende tast input, men stadig intet sker? Parametrene til PostMessage kan være forkerte, så vidt jeg husker skal nr. 2 være uint, 3. skal være IntPtr og det samme med 4. Men hvis jeg ændre disse siger den, at den ikke kan konvertere fra int til IntPtr.
IntPtr har da en constructor som tager en int som argument.
Synes godt om
Slettet bruger
13. februar 2011 - 01:26#5
Ahhh.. Har stadig ikke helt styr på IntPtr (ikke engang tæt på), men fik da alle konversion fejl væk, men det virker stadig ikke.
Hvordan skal jeg kalde PostMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);, når jeg har et IntPtr som argument nr 1 og ikke en HandleRef?
GetHandleBy something på dit vindue. ( mener jeg )
Synes godt om
Slettet bruger
13. februar 2011 - 01:52#7
Nu bliver jeg, undskyld sproget, sgu godt nok i tvivl om originalen i VB overhovedet virker. Prøvede at lave et lille VB projekt hvor jeg bare tyv stjal koden fra originalen, og samme sker. Den returnere ikke 0 og der sker intet.
Har lige et par ting jeg skal tjekke, jeg vender frygteligt tilbage.
Synes godt om
Slettet bruger
13. februar 2011 - 02:13#8
Er der nogen der kan give et eksempel på brug af PostMessage til at klikke og skrive i f.eks. notepad? Processen skal findes ved at gennemgå hver process efter navnet Notepad (eller notesblok hvis det nu er).
Synes godt om
Slettet bruger
13. februar 2011 - 02:59#9
[DllImport("user32.dll", CharSet = CharSet.Auto)] static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);
public const Int32 WM_KEYDOWN = 0x0100; public const Int32 WM_KEYUP = 0x0101; public const Int32 WM_CHAR = 0x0102; private const Int32 WM_LBUTTONDOWN = 0x0201; private const Int32 WM_LBUTTONUP = 0x0202;
Hvorfor virker andre taster så som Keys.A og Keys.D1 ikke? Og hvorfor er det som om at tasten ikke bliver givet slip på, altså når vi snakker om Keys.Enter?
Synes godt om
Slettet bruger
13. februar 2011 - 03:06#10
Hov lige meget det virker fint, hvis i synes en af tingene jeg har gjort er dumt, vil jeg meget gerne vide det og hvad jeg skal gøre i stedet.
Tak for hjælpen! Smid et svar og modtag points og det gælder jer begge.
Da arne_v ikke har lagt et svar, så får du bare alle points.
Tak for hjælpen!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.