IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Créer une imprimante


Sujet :

Langage Delphi

  1. #21
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    j'ai comme un doute...les données sont des pointeurs...sauf peut-être le TMonitorEx...

    pas le temps maintenant mais il faudrait tester tout simplement en chargeant la DLL qui fonctionne dans une appli et vérifier ce quelle retourne en effet le port monitor étant une simple DLL il est possible de l'invoquer normalement

    j'avais déjà fait des tests sommaires en 32 bits sur le EnumPorts

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    procedure TForm1.test(dll: PChar);
    var
      h: THandle;
      p: function (pRegistryRoot: PWideChar): PMonitorEx; stdcall;
      m: PMonitorEx;
      e: Bool;
      need, count: Cardinal;
      buf:array[0..500] of Char;
      w: PWideChar;
    begin
      h := LoadLibrary(dll);
      p := GetProcAddress(h, 'InitializePrintMonitor');
      m := p('System\CurrentControlSet\Control\Print\Monitors\ImagePrinter Port');
      e := m.Monitor.pfnEnumPorts(nil, 2, nil, 0, @need, @count);
      Memo1.Lines.add(Format('EnumPorts = %d, need = %d, count = %d, %d',[Ord(e), need, count, GetLastError]));
      FillChar(buf, SizeOf(buf), 0);
      e := m.Monitor.pfnEnumPorts(nil, 2, @buf, SizeOf(buf), @need, @count);
      Memo1.Lines.add(Format('EnumPorts = %d, need = %d, count = %d, %d',[Ord(e), need, count, GetLastError]));
      Memo1.Lines.add(IntToHex(cardinal(@buf), 4));
      Move(buf[0], w, SizeOf(w));
      if w = nil then
        Memo1.Lines.Add('nil')
      else
        Memo1.Lines.add(string(w));
      Move(buf[4], w, SizeOf(w));
      if w = nil then
        Memo1.Lines.Add('nil')
      else
        Memo1.Lines.add(string(w));
      Move(buf[8], w, SizeOf(w));
      if w = nil then
        Memo1.Lines.Add('nil')
      else
        Memo1.Lines.add(string(w));
      Move(buf[12], w, SizeOf(w));
      if w = nil then
        Memo1.Lines.Add('nil')
      else
        Memo1.Lines.add(string(w));
      Dump(buf, need);
      FreeLibrary(h);
    end;

  2. #22
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    bon, ça ne fonctionne pas encore mais ça ne plante plus en 64bits, ça venait de la taille de dwMonitorSize

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     TMonitorEx = packed record
      {$IFDEF WIN64}
        dwMonitorSize  : Int64;
      {$ELSE}
        dwMonitorSize  : Cardinal;
      {$ENDIF}
        Monitor        : TMonitor;
      end;
      PMonitorEx = ^TMonitorEx;
    je voulais avoir une console pour afficher les messages, mais ça crée une boîte de dialogue des plus étrange qui donne accès à la console dans une autre session.
    Nom : Presse-papiers-1.jpg
Affichages : 70
Taille : 29,6 Ko

  3. #23
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Re

    Donc c'est un problème de taille, je vais testé aussi de me côté semaine prochaine ou demain.

    Merci de l'info.

  4. #24
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    J'ai trouvé d'où vient ce message, c'est lié à Vista/Seven qui interdit à un service d'interagir avec l'interface utilisateur....

    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

  5. #25
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    J'ai trouvé d'où vient ce message, c'est lié à Vista/Seven qui interdit à un service d'interagir avec l'interface utilisateur....

    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
    Salut Paul, désolé du retard mais je reprends au mieux ce topic que je ne lacherai pas facilement, je dois vraiment arriver a faire ce driver.

    Sur ton dernier topic ce ne serais pas juste un problème d'UAC ?

  6. #26
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    Salut Paul, désolé du retard mais je reprends au mieux ce topic que je ne lacherai pas facilement, je dois vraiment arriver a faire ce driver.

    Sur ton dernier topic ce ne serais pas juste un problème d'UAC ?
    non, c'est bien une limitation spécifique des services...l'UAC est désactivée depuis bien longtemps sur mon PC

  7. #27
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    A la place de tout implementer on peut utilier un port qui existe deja
    créer une dll avec le même nom de driver renommer la dll origine ex:driver.dll vers +driver.dll
    ca fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
      function Init(pRegRoot:LPWSTR):pMonitorEx;stdcall;
      external '+driver.dll' name 'InitializePrintMonitor';
     
    var
       Mon:rMonitorEx;
       Ex:rMonitorEx;
     
     
    function InitializePrintMonitor(pRegRoot:LPWSTR):pMonitorEx;stdcall;export;
    var
       P:pMonitorEx;
    begin
       DbgSend('InitializePrintMonitor start');
       P:=Init(pRegRoot);
       Move(P^,Ex,P.dwMonitorSize);
       Result:=@Mon;
       DbgSend('InitializePrintMonitor end');
    end;
     
    function OpenPort(pName:LPWSTR;H:PHANDLE):BOOL;stdcall;
    begin
       DbgSend('OpenPort');
       Ex.OpenPortFunc(pName,H);
    end;
     
    function StartDocPort(hPort:HANDLE;pPrinterName:LPWSTR;
                           JobID,Level:DWORD;pDocInfo:LPBYTE):BOOL;stdcall;
    begin
       DbgSend('StartDocPort');
       Ex.StartDocPort(hPort,pPrinterName,JobID,Level,pDocInfo);
    end;
    ainsi de suite ...

  8. #28
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Montor Voir le message
    A la place de tout implementer on peut utilier un port qui existe deja
    créer une dll avec le même nom de driver renommer la dll origine ex:driver.dll vers +driver.dll
    ca fonctionne
    euh...c'est quoi l'intérêt ?!

  9. #29
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    pour savoir si on a la bonne coquille

Discussions similaires

  1. Comment créer une imprimante virtuelle?
    Par lbeaumonp dans le forum Windows
    Réponses: 4
    Dernier message: 26/01/2014, 22h26
  2. Créer une imprimante virtuelle
    Par christophertux dans le forum Virtualisation
    Réponses: 4
    Dernier message: 06/10/2010, 13h38
  3. Créer une imprimante virtuel
    Par neodelphi2007 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 28/02/2009, 08h21
  4. Créer une imprimante sur réseau local.
    Par byloute dans le forum Windows XP
    Réponses: 5
    Dernier message: 11/10/2007, 13h25
  5. Créer un compte qui donne accès seulement à une imprimante
    Par bart64 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 06/09/2006, 19h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo