Autor Thema: Text in der Statusleiste  (Gelesen 5505 mal)

Offline Onkel Domino

  • Aktives Mitglied
  • ***
  • Beiträge: 166
  • Geschlecht: Männlich
  • Tue Gutes - und rede darüber!
Text in der Statusleiste
« am: 06.01.15 - 11:53:25 »
Servus!

Ich optimiere gerade (m)eine Passwort-Datenbank. Unter anderem habe ich die Funktion ein Passwort in einem verschlüsselten Feld in die Zwischenablage zu kopieren. Dazu möchte ich das Passwort (optional) diskret anzeigen lassen. Ich dachte daran das PW mit 'Print <password>' gefolgt von einem weiteren 'Print' für einen Zeilenumbruch in der Statusleiste auszugeben. So kann man bei Bedarf das Passwort mit einem Klick auf die Statusleiste in Erfahrung bringen.

Nun meine Frage: Kann mir jemand sagen, ob die Meldungen in der Statusleiste irgendwo geloggt werden? Ich möchte natürlich nicht, dass (z.B. in der log.nsf) alle Passwörter im Klartext gespeichert werden. In der lokalen log.nsf konnte ich spontan nichts feststellen, möchte aber auf Nummer sicher gehen.

Vielleicht hat auch jemand noch eine andere Idee, wie man das Passwort schnell und einfach anzeigen lassen kann. Momentan ist dies nur durch Wechsel in den Bearbeiten-Modus möglich, was mir zu umständlich ist. Mousover wäre schön, gibt es aber nur im Web, wo ich die Datenbank nicht nutze. @Prompt oder dergleichen finde ich zu indiskret.

Grüße,
Markus
« Letzte Änderung: 06.01.15 - 12:26:28 von Onkel Domino »
There are only 10 types of people in the world: Those who understand binary and those who don't.

Glombi

  • Gast
Re: Text in der Statusleiste
« Antwort #1 am: 06.01.15 - 12:17:14 »
Seit Notes 7 kann man die Statusbar mitloggen:

http://www-10.lotus.com/ldd/dominowiki.nsf/dx/logstatusbar

Andreas

Offline Onkel Domino

  • Aktives Mitglied
  • ***
  • Beiträge: 166
  • Geschlecht: Männlich
  • Tue Gutes - und rede darüber!
Re: Text in der Statusleiste
« Antwort #2 am: 06.01.15 - 12:26:08 »
Ok, Danke! Sollte also relativ sicher sein, solange die Variable 'Debug_Outfile' in der notes.ini entsprechend gesetzt ist. Ich werde versuchen die Variable zur Laufzeit auszulesen und dann dementsprechend das Kennwort nicht anzeigen zu lassen.
There are only 10 types of people in the world: Those who understand binary and those who don't.

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Text in der Statusleiste
« Antwort #3 am: 06.01.15 - 17:45:25 »
Mach doch in deine Maske ein Dropdown Feld oder einen Abschnitt zum Aufklappen rein.
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Onkel Domino

  • Aktives Mitglied
  • ***
  • Beiträge: 166
  • Geschlecht: Männlich
  • Tue Gutes - und rede darüber!
Re: Text in der Statusleiste
« Antwort #4 am: 07.01.15 - 00:50:30 »
Prinzipiell eine gute Idee. Eine Abschnitt würde hier jedoch vom Design her nicht passen und eine Combobox lässt sich nur im Bearbeiten-Modus aufklappen.
There are only 10 types of people in the world: Those who understand binary and those who don't.

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Text in der Statusleiste
« Antwort #5 am: 07.01.15 - 10:12:55 »
Wie wäre es mit einer Rolle?
Dann fallen mir zwei Möglichkeiten ein.
Einmal ein Feld, das Berechnet zur Anzeige ist und nur dem Rolleninhaber angezeigt wird.
Oder eine Schaltfläche um Dir eine Box mit dem Kennwort anzeigen zu lassen.
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline Onkel Domino

  • Aktives Mitglied
  • ***
  • Beiträge: 166
  • Geschlecht: Männlich
  • Tue Gutes - und rede darüber!
Re: Text in der Statusleiste
« Antwort #6 am: 13.01.15 - 22:51:57 »
Danke für Deinen Input!

Ich möchte das Feld nicht per se anzeigen lassen, da jemand Drittes, der gerade auch Einsicht auf den Bildschirm hat, dann auch sofort das Passwort im Klartext sieht. Es soll möglich sein, trotz eines Bildschirm-Beobachters das Dokument zu öffnen, das Passwort zu kopieren und dann wieder zu schließen. Eine Dialogbox finde ich zu viel und man muss diese dann auch wieder weg klicken. Darüber mag man zwar Schmunzeln, aber ich finde es von der Bedienung einfach "smoother" die Information in die Statusleiste zu packen.

Grüße,
Markus
There are only 10 types of people in the world: Those who understand binary and those who don't.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Text in der Statusleiste
« Antwort #7 am: 14.01.15 - 08:45:46 »
Aus der Statusleiste kannst Du es aber nicht kopieren, sondern nur abtippen.

Ich würde das mit folgender Aktion realisieren (haben wir in einem anderen Zusammenhang so getan).

Du brauchst eine zusätzliche Maske mit einem einzigen Feld und einen Button in Deiner Anwendung.

Der Button (Lotus Script) erzeugt im Backend ein Dokument mit der neuen Maske und schreibt das Passwort in das Feld. Danach wird das Dokument im Lesemodus geöffnet, alles markiert und in die Zwischenablage kopiert, und das Dokument wieder geschlossen.

Sinngemäß so (aus dem Kopf, ohne Gewähr auf die richtigen Befehle)

Code
...
Set tmpdoc = New NotesDocument (db)
tmpdoc.Form = "dieNeueMaske"
tmpdoc.Feld = doc.Passwort
Set tmpuidoc = workspace.EditDocument (False, tmpdoc)
Call tmpuidoc.SelectAll
Call tmpuidoc.Copy
Call tmpuidoc.Close

Du siehst dann maximal ein kurzes Flackern auf dem Bildschirm und hast das Passwort in der Zwischenablage.

Offline Onkel Domino

  • Aktives Mitglied
  • ***
  • Beiträge: 166
  • Geschlecht: Männlich
  • Tue Gutes - und rede darüber!
Re: Text in der Statusleiste
« Antwort #8 am: 16.01.15 - 11:37:52 »
Hallo Peter,

für das Kopieren der Passwörter habe ich bereits eine etwas elegantere Lösung. Es geht hiermit ganz gut:

Code
Sub SetClipboardText(text As String)
	Dim hwnd As Long
	Dim hGlobalMemory As Long
	Dim lpGlobalMemory As Long
	Dim ret As Variant
	Dim CF_TEXT As Variant
	Dim GMEM_MOVEABLE As Variant
	Dim GMEM_ZEROINIT As Variant
	
	On Error Goto error_handler
	CF_TEXT = 1
	hwnd = NEMGetCurrentSubProgramWindow()
	
	
	If hwnd Then
		hGlobalMemory = GlobalAlloc(Clng(GMEM_MOVEABLE Or GMEM_ZEROINIT), Clng(Len(text)+1))
		If hGlobalMemory Then
			lpGlobalMemory = GlobalLock(hGlobalMemory)
			If lpGlobalMemory Then
				ret = lstrcpy(lpGlobalMemory, text)
				Call GlobalUnlock(hGlobalMemory)
				If OpenClipboard(hwnd) Then
					ret = EmptyClipboard()
					ret = SetClipboardData(CF_TEXT, hGlobalMemory)
					ret = CloseClipboard()
				End If
			Else
				Msgbox "Can't allocated global memory pointer.", 32, "Error"
			End If
		Else
			Msgbox "Can't allocated global memory handle.", 32, "Error"
		End If
	Else
		Msgbox "Can't get window handle.", 32, "Error"
	End If
	Exit Sub
error_handler:
	Print "Error: " + Error$(Err)
	Resume Next
End Sub	

Damit das Funktioniert, müssen die folgenden Deklarationen vorgenommen werden:

Code
Declare Function OpenClipboard Lib "user32" Alias "OpenClipboard" (Byval hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
Declare Function EmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
Declare Function GetClipboardData Lib "user32" Alias "GetClipboardData" (Byval wFormat As Long) As Long
Declare Function SetClipboardData Lib "user32" Alias "SetClipboardData" (Byval wFormat As Long, Byval hMem As Long) As Long
Declare Function IsClipboardFormatAvailable Lib "user32" Alias "IsClipboardFormatAvailable" (Byval wFormat As Long) As Long
Declare Function GlobalAlloc Lib "kernel32" Alias "GlobalAlloc" (Byval wFlags As Long, Byval dwBytes As Long) As Long
Declare Function GlobalLock Lib "kernel32" Alias "GlobalLock" (Byval hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (Byval hMem As Long) As Long
Declare Function GlobalSize Lib "kernel32" Alias "GlobalSize" (Byval hMem As Long) As Long
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As Long, Byval lpString2 As String) As Long
Declare Function lstrcpy1 Lib "kernel32" Alias "lstrcpyA"(Byval lpString1 As String, Byval lpString2 As Any) As Long
Declare Function NEMGetCurrentSubprogramWindow Lib "nnotesws.dll" () As Long
Declare Function NEMStopSubprogramWindow Lib "nnotesws.dll" (Byval wHandle As Long) As Integer 

Der Code in einem Button oder Link-Hotspot kopiert den Text jedem beliebigen Feld dann mit diesem Aufruf:

Code
Call SetClipboardText(Doc.Fieldname(0))


Für das bessere Verständnis von meinem Vorhaben, welches mittlerweile bereits realisiert wurde, habe ich unten mal ein paar Screenshots (jeweils im Bearbeiten- und Lese-Modus) angehangen.

Ich kann in einem Dokument einen Benutzernamen, drei Passwörter und fünf Seriennummer speichern. Die Passwörter sind im Lese-Modus versteckt, die Seriennummern immer sichtbar. Damit kann man dann z.B. recht komfortabel die Login-Daten von seinem Mobilfunk-Provider speichern, sowie die PIN und PUK von seiner SIM-Karte plus die IMSI. Alternativ natürlich den Router-Zugang plus WLAN-Kennwort. Mit der Maske kann ich eigentlich alle meine Use-Cases erschlagen. Die Benennung der Passwörter und Seriennummern lässt sich im Bearbeiten-Modus ändern.

Auslöser für diesen Thread war nun, dass ich das Passwort manchmal gern gewusst hätte, wenn ich es in die Zwischenablage kopiere. Dafür hatte ich von Anfang an die Statusleiste im Auge. Ich war mir nur nicht sicher, ob das irgendwo mitgeloggt werden würde, was für mich ein nicht akzeptables Risiko dargestellt hätte.

Als i-Tüpfelchen hat die DB auch noch einen Passwort-Generator. Den Code habe ich hier aus dem Forum und dafür bedanke ich mich an dieser Stelle ganz herzlich bei User Eknori, der hier seit Jahren wertvolle Tipps postet! Die Datenbank war übrigens ein OpenNTF-Projekt (link), welches die Kopieren-Funktion bereits mitbrachte.

There are only 10 types of people in the world: Those who understand binary and those who don't.

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Text in der Statusleiste
« Antwort #9 am: 16.01.15 - 19:10:37 »
Really nice  ;D ;D

Da du DLL-Code offensichtlich nicht scheust, kannst du dir vielleicht mal meine "tooltip.lss" ansehen in diesem Thread:
http://atnotes.de/index.php/topic,58040.0.html
Ein Aufruf von
Code
Call OpenToolTip_W32("Hallo", TT_STYLE_BALLOON, "", 0)
lässt an der aktuellen Mausposition einen Tooltip aufpoppen.

Gruß
Roland
« Letzte Änderung: 16.01.15 - 19:13:39 von pram »
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Onkel Domino

  • Aktives Mitglied
  • ***
  • Beiträge: 166
  • Geschlecht: Männlich
  • Tue Gutes - und rede darüber!
Re: Text in der Statusleiste
« Antwort #10 am: 16.01.15 - 21:43:54 »
Hi Roland,

Danke für den Tipp. Klingt sehr interessant! Ich schaue es mir mal an...

Grüße,
Markus
There are only 10 types of people in the world: Those who understand binary and those who don't.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz