Avatar billede nextstop Nybegynder
23. juni 2006 - 10:40 Der er 2 kommentarer og
1 løsning

Få langt printernavn retur fra PrintDlg

Jeg er ved at rette et program, som bl.a. får hentet printernavnet fra en printerdialog. Problemet er, at navnet kan være længere end 32 tegn, og så virker pdevmode->dmDeviceName ikke, da denne kortes ned.

Jeg forsøger så i stedet at bruge print_dlg->hDevNames, men jeg kan ikke se, hvordan jeg får noget fornuftigt retur.

PRINTDLG print_dlg;
DEVNAMES *dn_handle;
char *pName;
char temp_name[64];

// Initierer print_dlg til nulls her
PrintDlg(&print_dlg);
// Error check her
dn_handle = print_dlg.hDevNames;
pName = dn_handle+dn_handle->wDeviceOffset;
strcpy(temp_name, pName);

Jeg får ikke noget fornuftigt retur. wDeviceOffset ser dog ud til at indeholde en værdi, men den peger på ingenting.

Beskrivelse hos microsoft:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/commondialogboxreference/commondialogboxstructures/devnames.asp

På forhånd tak.
Avatar billede bertelbrander Novice
24. juni 2006 - 02:34 #1
Dette  bør virke:
  PRINTDLG print_dlg;
  DEVNAMES *dn_handle;
  char *pName;
  char temp_name[64];

  memset(&print_dlg, 0, sizeof(print_dlg));
  print_dlg.lStructSize = sizeof(print_dlg);
  PrintDlg(&print_dlg);
  // Error check her
  dn_handle = (DEVNAMES *)GlobalLock(print_dlg.hDevNames);
  pName = (char *)dn_handle + dn_handle->wDeviceOffset;
  strcpy(temp_name, pName);
  std::cout << temp_name << std::endl;
  GlobalUnlock(print_dlg.hDevNames);

Der er to vigtige ændringer:
GlobalLock for at få en pointer til data ud fra en HGLOBAL
Cast foran dn_handle, ellers tæller den sizeof(dn_handle)*dn_handle->wDeviceOffset frem.
Avatar billede nextstop Nybegynder
26. juni 2006 - 14:14 #2
Perfekt, det spiller bare. Mange tak! :o)
Avatar billede nextstop Nybegynder
30. juni 2006 - 15:39 #3
Lukketid.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester