WinApi, problem z SendMessage i Macro


(Smutasek2) #1

Witam.

Potrzebuje napisać w c/c++ fukcję która będzie mi wypełniać ListView. Niestety za każdym razem kiedy próbuję wywołać ListView_SetItemText() lub wysłać LVM_GETITEMCOUNT to moja fukcja głupieje i nawet nie zwraca parametrów wejściowych.

Od razu uprzedzam, że dopiero zaczynam z tym językiem, jedyny jaki znam to AutoHotkey na poziomie średniozaawansowanym.

fukcję kompuluję w VS 2010 SDK v7.0A

 

Funkcję tę wywołuje z AHK za pomocą (&C_Function to adres do kodu maszynowego fukcji napisanej w C):

qqq(array, hwnd){
static xxx := "qqq"
	return dllcall(&C_Function, "uint", &array, "uint", hwnd, "uint", &xxx)
}

#include <Windows.h>
#include <commctrl.h>
qqq(array, hwnd, stringaddr)
{
   // int iItem=SendMessage(hwnd,LVM_GETITEMCOUNT,0,0); // <----- po włączeniu funkcja nic nie zwraca, nawet parametrów wejsciowych
   SendMessage(hwnd, WM_LBUTTONDOWN, 0, 1); // <----- po włączeniu funkcja nic nie zwraca, nawet parametrów wejsciowych
    return WM_LBUTTONDOWN;
}

PS.

tak dla pewności zrobiłem decompilację

00000000  6A01              push byte +0x1


(Edgarus) #2

Primo, co chcesz uzyskać?

Secundo, czy w hwnd idzie uchwych do listview? Sprawdź w debuggerze, co leci w parametrze hwnd i skoreluj to z danymi np ze Spy++. Może po prostu komunikaty wysyłasz gdzie indziej.

 

Pozdrawiam

PG


(Smutasek2) #3

hwnd jest uchwytem to LV i prawdopodobnie znalazłem przyczynę braku działania funkcji c, generator kodu maszynowego do AHK nie używał w pełni skompilowanej funkji (prawdopodobnie jakiś plik przjściowy w procesie kompilacji i zamiast opcodów mjejscami były nazwy zmiennych i generator je pomijał) - nevermind.