![]() |
Bluetooth API (JwaBluetoothAPIs) Problem erhalte immer 0
Ich möchte ein tool coden welches anhand der Qualität der Verbindung von Hany zu PC bei abnehmender Qualität des Signales den pc lockt. Dies über Bluetooth, damit soll erreicht werden, dass wenn ich mich mit meinem Handy vom PC entferne dass der automatisch glockt wird.
Ich hab diese API gefunden welche ich nun anzuwenden versuche: ![]() Mein Problem ist nun dass es mir irgendwie immer falsche werte zurück liefert ich habe in erster Lienie mal versucht überhaupt Informationen eines Bluetooth Geräts welches in der nähe ist zu bekommen. und zwar so:
Delphi-Quellcode:
pbtdi.address enthält die MAC adresse in eimem array of byte diesen teil konvertiere ich wider zu hex um
function HexB(b: Byte): string;
const HexChar: array[0..15] of char = '0123456789ABCDEF'; begin HexB := HexChar[b shr 4] + HexChar[b and $0F]; end; function btadresstostr(adr:_BLUETOOTH_ADDRESS):string; var i:integer; begin result:=''; for i:=0 to 4 do begin result:=result+HexB(adr.rgBytes[i])+':'; end; result:=result+HexB(adr.rgBytes[5]); end; procedure TForm1.Button1Click(Sender: TObject); var pbtsp: BLUETOOTH_DEVICE_SEARCH_PARAMS; pbtdi:BLUETOOTH_DEVICE_INFO; r:HBLUETOOTH_DEVICE_FIND; begin r:= BluetoothFindFirstDevice(pbtsp,pbtdi); showmessage(btadresstostr(pbtdi.address)); showmessage(pbtdi.szName); showmessage(inttostr(pbtdi.Address.ullLong)); end; ich kriebe werte jedoch stimmen die nicht mit den wirklichen überein und jedes mal wenn ich neu compieliere erhalte ich wider andere werte ich vermute irgend was ist noch nicht iniialisiert hat jemand eine idee was ich noch machen muss damit es klappt? danke für eure hilfe greetz Cy |
Re: Wo ist hier der Wurm drin??
ich bin der Sache etwas näher gekommen in dem ich ein C programm umgeschrieben habe nun schauts so aus:
Delphi-Quellcode:
aber ich erhalte immer noch falsch werte hat jemand eine idee ?
procedure TForm1.Button3Click(Sender: TObject);
var //radio FirstRadio:PBlueToothFindRadioParams; RadioHandle:THANDLE ; NextRadio:THANDLE; FoundNextRadioHandle:BOOL; RadioDeviceInfo:BLUETOOTH_RADIO_INFO; dw:DWORD; //device DeviceHandle:HBLUETOOTH_DEVICE_FIND; DeviceInfo:BLUETOOTH_DEVICE_INFO; SearchParams:BLUETOOTH_DEVICE_SEARCH_PARAMS; FoundDevice:BOOL; FoundDeviceInfo:BLUETOOTH_DEVICE_INFO; begin BluetoothFindFirstRadio(FirstRadio,RadioHandle); if(RadioHandle = NULL)then begin showmessage('Problems Creating Radio Handle'); end; FoundNextRadioHandle:= BluetoothFindNextRadio(RadioHandle,NextRadio); if(FoundNextRadioHandle = TRUE)then begin showmessage('Found Another Bluetooth Radio'); end else begin showmessage('Only One Bluetooth Radio Handle Present'); end; BluetoothGetRadioInfo(RadioHandle,RadioDeviceInfo); dw:= GetLastError(); showmessage(inttostr(dw)); SearchParams.dwSize:= sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS); SearchParams.fReturnAuthenticated:= TRUE; SearchParams.fReturnRemembered:= TRUE; SearchParams.fReturnUnknown:= TRUE; SearchParams.fReturnConnected:= TRUE; SearchParams.fIssueInquiry:= TRUE; SearchParams.cTimeoutMultiplier:= 10; SearchParams.hRadio:= RadioHandle; BluetoothFindFirstDevice(SearchParams,DeviceInfo); showmessage(btadresstostr(DeviceInfo.Address)); showmessage(DeviceInfo.szName); dw:= GetLastError(); showmessage(inttostr(dw)); FoundDevice:= BluetoothFindNextDevice(DeviceHandle,FoundDeviceInfo); dw:= GetLastError(); showmessage(inttostr(dw)); end; danke für eure Hilfe greetz Cy |
Re: Wo ist hier der Wurm drin??
Hallo CTV,
ändere bitte den Titel. Damit erhöhst du auch die Chance, dass zusätzliche User sich deines Problemes annehmen. Der Titel sollte aussagekräftig auf den Themenbereich bezeichnen, in dem das Problem liegt. |
Re: Bluetooth API (JwaBluetoothAPIs) Problem erhalte immer 0
nun bin ich einen Schritt weiter: mein code sieht nun so aus:
Delphi-Quellcode:
mein Problem ist folgendes und zwar die Zeile:
procedure TForm1.Button6Click(Sender: TObject);
var hRadio,hDeviceFind:THANDLE; hfind:HBLUETOOTH_RADIO_FIND; btfrp:PBlueToothFindRadioParams; radioInfo:BLUETOOTH_RADIO_INFO; deviceInfo:BLUETOOTH_DEVICE_INFO; deviceSearchParams:BLUETOOTH_DEVICE_SEARCH_PARAMS; begin btfrp.dwSize:=sizeof(btfrp); //hier Problem hFind := BluetoothFindFirstRadio( btfrp, hRadio ); showmessage(inttostr(sizeof(btfrp))); if (hFind > 0) then begin repeat begin radioInfo.dwSize:= sizeof(radioInfo); if (ERROR_SUCCESS = BluetoothGetRadioInfo(hRadio, radioInfo)) then begin memo1.Lines.Add('Radio: '+ radioInfo.szName) end else begin showmessage('error'); end; deviceInfo.dwSize := sizeof(deviceInfo); // memset(&deviceSearchParams, 0, sizeof(deviceSearchParams)); deviceSearchParams.dwSize := sizeof(deviceSearchParams); //deviceSearchParams.fReturnAuthenticated = true; deviceSearchParams.fReturnRemembered := true; //deviceSearchParams.fReturnUnknown = true; //deviceSearchParams.fReturnConnected = true; deviceSearchParams.hRadio := hRadio; hDeviceFind := BluetoothFindFirstDevice(deviceSearchParams, deviceInfo); if (hDeviceFind>0) then begin while(BluetoothFindNextDevice(hDeviceFind, deviceInfo)) do begin showmessage('Device: '+deviceInfo.szName); //BluetoothDisplayDeviceProperties(0, &deviceInfo); end; BluetoothFindDeviceClose(hDeviceFind); end; // if BluetoothGetDeviceInfo(hRadio, deviceInfo) then begin showmessage('Device: '+deviceInfo.szName); // BluetoothUpdateDeviceRecord - change name // BluetoothRemoveDevice end; end; until (BluetoothFindNextRadio( hFind, hRadio ) ); end; BluetoothFindRadioClose( hFind ); end;
Delphi-Quellcode:
verursacht eine Zugriffsverletzung aber ich weiss nicht wieso
btfrp.dwSize:=sizeof(btfrp);
in der API ist folgender code aufgeführt nach welchem ich meinen nachgebaut habe: [code] // ************************************************** ************************* // // Radio Enumeration // // Description: // This group of APIs enumerates the installed Bluetooth radios. // // Sample Usage: // HANDLE hRadio; // BLUETOOTH_FIND_RADIO_PARAMS btfrp = { sizeof(btfrp) }; // // HBLUETOOTH_RADIO_FIND hFind = BluetoothFindFirstRadio( &btfrp, &hRadio ); // if ( NULL != hFind ) // { // do // { // // // // TODO: Do something with the radio handle. // // // // CloseHandle( hRadio ); // // } while( BluetoothFindNextRadio( hFind, &hRadio ) ); // // BluetoothFindRadioClose( hFind ); // } // // ************************************************** ************************* [code] und dort wird BLUETOOTH_FIND_RADIO_PARAMS btfrp = { sizeof(btfrp) }; direckt zugewisen was aber in delphi nicht möglich ist wenn ich das hier probiere:
Delphi-Quellcode:
dann erhalte ich einen Fehler da die typen Integer und PBlueToothFindRadioParams nicht überein stimmen
btfrp:=sizeof(btfrp);
ausser ich schreibe die Zahl 0 hin dann gehts. aber sizeof(btfrp) wenn ich mir das anzeigen lasse ist 4 und auch 4 kann ich nicht direckt zuweisen nur über das btfrp.dwsize:=4; ghets jedoch gibts dann zur laufzeit eine zugriffsverletzung. hat jemand eine idee was das Problem ist? ich währe sehr dankbar! das muss doch irgendwie gehen Greetz Cy |
Re: Bluetooth API (JwaBluetoothAPIs) Problem erhalte immer 0
Zitat:
Zitat:
Delphi-Quellcode:
Macht man aber normalerweise nicht so...
var
btfrp: TBlueToothFindRadioParams = ( dwSize: SizeOf(TBlueToothFindRadioParams ) ); |
Re: Bluetooth API (JwaBluetoothAPIs) Problem erhalte immer 0
Danke dir Flocke
ich habe das Problem lösen können habe aber schon wider ein neus: Lösung des alten Problems: die Deklaration sieht nun so aus:
Delphi-Quellcode:
und die Zuweisung so:
var
btfrp: _BLUETOOTH_FIND_RADIO_PARAMS = ( dwSize: SizeOf(TBlueToothFindRadioParams ));
Delphi-Quellcode:
BluetoothFindFirstRadio erwartet einen Pointer für btfrp dann habe ich einfach ein @ hingemacht
btfrp.dwSize:=sizeof(btfrp);
hFind := BluetoothFindFirstRadio(@btfrp, hRadio ); Neues Problem: nun kann ichs starten und es kommt kein fehler aber es zeigt mir immer noch nichts schlaues an. und es kann noch nicht richtig auf die Infos zugreifen:
Delphi-Quellcode:
ERROR_SUCCESS wird zu false ausgewertet und somit wird das error showmessage aufgerufen.
radioInfo.dwSize:= sizeof(radioInfo);
if (ERROR_SUCCESS = BluetoothGetRadioInfo(hRadio,radioInfo)) then begin memo1.Lines.Add('Radio: '+ radioInfo.szName) end else begin showmessage('error read RadioInfo'); end; Ich weiss aber nicht wieso denn hfind ist nicht 0 es wenn ich hfind anzeigen lasse hat hfind den wert 4 (den selben wert, welcher auch sizeof(btfrp) zurück gibt) hat jemand eine idee wieso ERROR_SUCCESS zu false ausgewertet wird?? Danke für eure Hilfe Greetz CTV |
Re: Bluetooth API (JwaBluetoothAPIs) Problem erhalte immer 0
so ich bin nochma einen schritt weiter:
Delphi-Quellcode:
das Problem ist nun folgendes:
procedure TForm1.Button3Click(Sender: TObject);
var hRadio,hDeviceFind:THANDLE; hfind:HBLUETOOTH_RADIO_FIND; btfrp:TBlueToothFindRadioParams; radioInfo:BLUETOOTH_RADIO_INFO; deviceInfo:BLUETOOTH_DEVICE_INFO; deviceSearchParams:BLUETOOTH_DEVICE_SEARCH_PARAMS; Err:integer; begin try try btfrp.dwSize:=sizeof(btfrp); hFind := BluetoothFindFirstRadio( @btfrp, hRadio ); if (hFind > 0) then begin repeat radioInfo.dwSize:= sizeof(radioInfo); if (ERROR_SUCCESS = BluetoothGetRadioInfo(hRadio, radioInfo)) then showmessage('Radio: '+ radioInfo.szName) else showmessage('error'); deviceInfo.dwSize := sizeof(deviceInfo); deviceSearchParams.dwSize := sizeof(deviceSearchParams); deviceSearchParams.fReturnRemembered := true; deviceSearchParams.hRadio := hRadio; hDeviceFind := BluetoothFindFirstDevice(deviceSearchParams, deviceInfo); if (hDeviceFind>0) then begin while(BluetoothFindNextDevice(hDeviceFind, deviceInfo)) do begin showmessage('Device: '+deviceInfo.szName); end; BluetoothFindDeviceClose(hDeviceFind); end; BluetoothGetDeviceInfo(hRadio, deviceInfo); showmessage('Device: '+deviceInfo.szName); end; until (BluetoothFindNextRadio( hFind, hRadio ) ); BluetoothFindRadioClose( hFind ); end else begin Err:=GetLastError; showmessage(SysErrorMessage(Err)+' ('+inttostr(Err)+')'); end; except on E:Exception do begin showmessage('error'+e.Message);readln; end; end; finally //readln; end; end; showmessage(SysErrorMessage(Err)+' ('+inttostr(Err)+')'); gibt mir aus: "Es sind keine Daten mehr verfügbar (259)" und ich weiss nicht genau was damit gemient ist und was dass genau das Probelm ist wenn jemand eine vermutung oder eine ahnung hat bitte melden :) danke Greetz Cy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz