diff --git a/main.frm b/main.frm index 5203819..dd0a07e 100644 --- a/main.frm +++ b/main.frm @@ -15837,12 +15837,6 @@ object Form1: TForm1 object PopupMenu5: TPopupMenu Left = 208 Top = 208 - object MenuItem35: TMenuItem - Caption = '-' - end - object MenuItem39: TMenuItem - Caption = '-' - end object MenuItem40: TMenuItem Caption = 'System Camera' Bitmap.Data = { @@ -17298,10 +17292,7 @@ object Form1: TForm1 OnClick = MenuItem33Click end end - object MenuItem43: TMenuItem - Caption = '-' - end - object MenuItem30: TMenuItem + object MenuItem23: TMenuItem Caption = '-' end object MenuItem44: TMenuItem @@ -17428,9 +17419,6 @@ object Form1: TForm1 } OnClick = MenuItem9Click end - object MenuItem23: TMenuItem - Caption = '-' - end object MenuItem45: TMenuItem Caption = 'Exit' Bitmap.Data = { @@ -31258,6 +31246,7 @@ object Form1: TForm1 55C95D5D5DA76D6D6D707272722A6868680A666766036D6C6D006D6E6D006E6E 6E00000000000000000000000000000000000000000000000000 } + Visible = False OnClick = MenuItem13Click end object MenuItem37: TMenuItem @@ -31397,10 +31386,137 @@ object Form1: TForm1 Visible = False OnClick = MenuItem37Click end + object MenuItem38: TMenuItem + Caption = 'Input Capture Password (Sudo)' + Bitmap.Data = { + B60E0000424DB60E0000000000003600000028000000200000001D0000000100 + 200000000000800E000064000000640000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF02FFFFFF09FFFF + FF12FFFFFF16FFFFFF16FFFFFF16FFFFFF16FFFFFF16FFFFFF16FFFFFF16FFFF + FF16FFFFFF16FFFFFF16FFFFFF16FFFFFF16FFFFFF15FFFFFF12FFFFFF08FFFF + FF01000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF01FFFFFF0FFFFFFF3EFFFF + FF6AFFFFFF75FFFFFF76FFFFFF76FFFFFF76FFFFFF76FFFFFF76FFFFFF76FFFF + FF76FFFFFF76FFFFFF76FFFFFF76FFFFFF76FFFFFF75FFFFFF67FFFFFF39FFFF + FF0DFFFFFF000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF02FEFEFE2CEDEDEDCCF1F1 + F1E8F1F1F1EAF1F1F1EAF1F1F1EAF1F1F1EAF1F1F1EAF1F1F1EAF1F1F1EAF1F1 + F1EAF1F1F1EAF1F1F1EAF1F1F1EAF1F1F1EAF2F2F2EAF9F9F9E6FFFFFF84FFFF + FF22FFFFFF010000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF03F6F6F656DBDBDBBAF6F6 + F680F5F5F580F5F5F580F5F5F580F5F5F580F5F5F580F5F5F580F5F5F580F5F5 + F580F5F5F580F5F5F580F5F5F580F5F5F580F7F7F781E5E5E5D6FBFBFBAAFFFF + FF2FFFFFFF020000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF03F3F3F35AB0B0B0B9F1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF2F2F27CE0E0E0CCFAFAFAACFFFF + FF30FFFFFF020000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF03F3F3F35AB0B0B0B9F1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF2F2F27CE0E0E0CCFAFAFAACFFFF + FF30FFFFFF020000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF03F3F3F35AB0B0B0B9F1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF2F2F27CE0E0E0CCFAFAFAACFFFF + FF30FFFFFF020000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF03F3F3F35AB0B0B0B9F1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF2F2F27CE0E0E0CCFAFAFAACFFFF + FF30FFFFFF020000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF03F3F3F35AB0B0B0B9F1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF2F2F27CE0E0E0CCFAFAFAACFFFF + FF30FFFFFF020000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF03F3F3F35AB0B0B0B9F1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF2F2F27CE0E0E0CCFAFAFAACFFFF + FF30FFFFFF020000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF03F3F3F35AB0B0B0B9F1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF2F2F27CE0E0E0CCFAFAFAACFFFF + FF30FFFFFF020000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF03F3F3F35AB0B0B0B9F1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF2F2F27CE0E0E0CCFAFAFAACFFFF + FF30FFFFFF020000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF03F3F3F35AB0B0B0B9F1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF2F2F27CE0E0E0CCFAFAFAACFFFF + FF30FFFFFF020000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF03F2F2F257B0B0B0B9F1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF1F1 + F17CF1F1F17CF1F1F17CF1F1F17CF1F1F17CF2F2F27CE0E0E0CCF9F9F9A7FFFF + FF2DFFFFFF020000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF02F2F2F240A9A9A9C9D9D9 + D98AEFEFEF7DDBDBDB87E6E6E689E5E5E58AE5E5E58AE5E5E58AE5E5E58AE5E5 + E58AE5E5E58AE7E7E788E5E5E581E8E8E87FCBCBCB94E8E8E8D9FBFBFB80FFFF + FF1CFFFFFF010000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF0AA2A2A26EB1B1 + B1C2E4E4E483E7E7E7C0CFCFCFD0B7B7B7AEB0B0B0A2AFAFAFA1AFAFAFA1AFAF + AFA1B0B0B0A2A6A6A6BEC3C3C3A2F3F3F38EE7E7E7DDF7F7F798FFFFFF2DFFFF + FF08FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000003F3F3F00FFFFFF01FFFFFF16C0C0 + C0BFE2E2E286E1E1E1DBFFFFFF9CFFFFFF2FFFFFFF0CFFFFFF0BFFFFFF0BFFFF + FF0BFFFFFF0EF1F1F160A6A6A6BBF8F8F898E1E1E1E1FFFFFF5DFFFFFF0EFFFF + FF002D2D2D000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000AFAFAF00FFFFFF00FFFFFF14BFBF + BFBEE2E2E286DBDBDBDBFFFFFF98FFFFFF26FFFFFF01ACACAC00ACACAC00ACAC + AC00FFFFFF03F0F0F059A5A5A5BBF9F9F995E1E1E1E2FFFFFF5DFFFFFF0DF5F5 + F500000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000AFAFAF00FFFFFF00FFFFFF14BFBF + BFBEE2E2E286DBDBDBDBFFFFFF98FFFFFF26FFFFFF01FFFFFF00FFFFFF00FFFF + FF00FFFFFF03F0F0F059A5A5A5BBF9F9F993DEDEDEE4FFFFFF5EFFFFFF0EF5F5 + F500000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000AFAFAF00FFFFFF00FFFFFF14BFBF + BFBEE1E1E186DBDBDBDBFFFFFF99FFFFFF27FFFFFF01FFFFFF00FFFFFF00FFFF + FF00FFFFFF03F0F0F05AA5A5A5BBF9F9F992E2E2E2E2FFFFFF5AFFFFFF0CF3F3 + F300000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000AFAFAF00FFFFFF00FFFFFF12BFBF + BFBCE1E1E186DBDBDBDAFFFFFFA1FFFFFF2EFFFFFF02FFFFFF00FFFFFF002B2B + 2B00FFFFFF06F1F1F161ADADADB8FAFAFA98EAEAEADAFFFFFF4FFFFFFF098E8E + 8E00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000AFAFAF00DCDCDC00FFFFFF0CCBCB + CBA9D7D7D78CE3E3E3CEFDFDFDC0FFFFFF4DFFFFFF0DFFFFFF01FFFFFF00FFFF + FF02FFFFFF15F2F2F28AD1D1D1A3FBFBFBA8F3F3F3C5FFFFFF3BFFFFFF058B8B + 8B00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000AFAFAF00FAFAFA00FFFFFF05E0E0 + E07ACFCFCF9CF6F6F6A7F7F7F7EAFFFFFF92FFFFFF42FFFFFF1AFFFFFF12FFFF + FF1FFFFFFF52F9F9F9CAF7F7F783FCFCFCC9FDFDFD96FFFFFF24FFFFFF028B8B + 8B00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000AFAFAF00FFFFFF00FFFFFF01F7F7 + F726A7A7A7C5E6E6E686F6F6F6CEFAFAFAE5FFFFFFA8FFFFFF79FFFFFF6CFDFD + FD87F7F7F7D2FCFCFCA2F4F4F48CFDFDFDD9FFFFFF55FFFFFF0EFFFFFF008B8B + 8B00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000AFAFAF00FFFFFF00FFFFFF00FFFF + FF06A5A5A56AA6A6A6BCEAEAEA86F7F7F7B9F4F4F4E8F5F5F5EAF2F2F2E7E8E8 + E8DAFAFAFA9BDCDCDC8AF9F9F9CDFDFDFD82FFFFFF21FFFFFF03BCBCBC008B8B + 8B00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000AFAFAF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0A94949476959595C6D6D6D68FEEEEEE83F8F8F88BF7F7F787E2E2 + E285A9A9A9A9CFCFCFD5FCFCFC83FFFFFF26FFFFFF06FFFFFF00FFFFFF008B8B + 8B00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000AFAFAF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF01FFFFFF08BABABA3E878787A6979797CAAAAAAACBC2C2C2C8D4D4 + D4C4DFDFDFA5FCFCFC4EFFFFFF1AFFFFFF05FFFFFF00FFFFFF00FFFFFF008B8B + 8B00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000AFAFAF00FCFCFC00D5D5D500D6D6 + D600D6D6D600FFFFFF00FFFFFF02FFFFFF0AFFFFFF17FFFFFF27FFFFFF29FFFF + FF20FFFFFF14FFFFFF08FFFFFF01FFFFFF00D6D6D600D6D6D600D6D6D6007474 + 7400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000006A6A6A0099999900000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF01FFFFFF01FFFF + FF01FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000 + } + Visible = False + OnClick = MenuItem38Click + end end object UniqueInstance1: TUniqueInstance Enabled = True Identifier = 'CameraControl' + UpdateInterval = 500 + OnOtherInstance = UniqueInstance1OtherInstance Left = 832 Top = 664 end diff --git a/main.lrj b/main.lrj index 1d5fa39..8ff8fc2 100644 --- a/main.lrj +++ b/main.lrj @@ -31,5 +31,6 @@ {"hash":4691652,"name":"tform1.menuitem44.caption","sourcebytes":[65,98,111,117,116],"value":"About"}, {"hash":315140,"name":"tform1.menuitem45.caption","sourcebytes":[69,120,105,116],"value":"Exit"}, {"hash":185423705,"name":"tform1.menuitem13.caption","sourcebytes":[75,105,108,108,32,67,97,112,116,117,114,105,110,103,32,40,85,115,101,114,32,77,111,100,101,41],"value":"Kill Capturing (User Mode)"}, -{"hash":200734201,"name":"tform1.menuitem37.caption","sourcebytes":[75,105,108,108,32,67,97,112,116,117,114,105,110,103,32,40,83,117,100,111,41],"value":"Kill Capturing (Sudo)"} +{"hash":200734201,"name":"tform1.menuitem37.caption","sourcebytes":[75,105,108,108,32,67,97,112,116,117,114,105,110,103,32,40,83,117,100,111,41],"value":"Kill Capturing (Sudo)"}, +{"hash":49173897,"name":"tform1.menuitem38.caption","sourcebytes":[73,110,112,117,116,32,67,97,112,116,117,114,101,32,80,97,115,115,119,111,114,100,32,40,83,117,100,111,41],"value":"Input Capture Password (Sudo)"} ]} diff --git a/main.pas b/main.pas index 3cd9879..98e9073 100644 --- a/main.pas +++ b/main.pas @@ -49,7 +49,7 @@ type MenuItem20 : TMenuItem; MenuItem21 : TMenuItem; MenuItem22 : TMenuItem; - MenuItem23 : TMenuItem; + MenuItem23: TMenuItem; MenuItem24 : TMenuItem; MenuItem25 : TMenuItem; MenuItem26 : TMenuItem; @@ -57,20 +57,17 @@ type MenuItem28 : TMenuItem; MenuItem29 : TMenuItem; MenuItem3 : TMenuItem; - MenuItem30 : TMenuItem; MenuItem31 : TMenuItem; MenuItem32 : TMenuItem; MenuItem33 : TMenuItem; MenuItem34 : TMenuItem; - MenuItem35 : TMenuItem; MenuItem36 : TMenuItem; MenuItem37 : TMenuItem; - MenuItem39 : TMenuItem; + MenuItem38: TMenuItem; MenuItem4 : TMenuItem; MenuItem40 : TMenuItem; MenuItem41 : TMenuItem; MenuItem42 : TMenuItem; - MenuItem43 : TMenuItem; MenuItem44 : TMenuItem; MenuItem45 : TMenuItem; MenuItem5 : TMenuItem; @@ -115,6 +112,7 @@ type procedure MenuItem34Click(Sender: TObject); procedure MenuItem36Click(Sender: TObject); procedure MenuItem37Click(Sender: TObject); + procedure MenuItem38Click(Sender: TObject); procedure MenuItem3Click(Sender: TObject); procedure MenuItem4Click(Sender: TObject); procedure MenuItem6Click(Sender: TObject); @@ -129,6 +127,8 @@ type procedure TrayIcon3Click(Sender: TObject); procedure TrayIcon4Click(Sender: TObject); procedure TrayIcon5Click(Sender: TObject); + procedure UniqueInstance1OtherInstance(Sender: TObject; + ParamCount: Integer; const Parameters: array of String); procedure VpClock1SecondChange(Sender: TObject); private @@ -221,14 +221,14 @@ end; procedure PopUpWebcamOn; begin Form1.PopupNotifier2.Text := 'Camera is On' + LineEnding + 'Video Device: /dev/video' + IntToStr(CountNumber)+ '/'; - Form1.PopupNotifier2.ShowAtPos(NewWidth - 100 , NewHeight div 2 - 550); + Form1.PopupNotifier2.ShowAtPos(NewWidth - 200 , NewHeight div 2 - 550); Form1.TrayIcon5.Hint := 'Camera Status' + LineEnding + 'Camera is On'; end; procedure PopUpWebcamOff; begin Form1.PopupNotifier1.Text := 'No Camera' + LineEnding + 'Video Device: /dev/video' + IntToStr(CountNumber)+ '/'; - Form1.PopupNotifier1.ShowAtPos(NewWidth - 100 , NewHeight div 2 - 550); + Form1.PopupNotifier1.ShowAtPos(NewWidth - 200 , NewHeight div 2 - 550); Form1.TrayIcon5.Hint := 'Camera Status' + LineEnding + 'Camera is Disabled'; end; @@ -236,21 +236,21 @@ procedure PopUpWebcamCaptures; begin Form1.PopupNotifier7.Text := 'Camera is Capturing' + LineEnding + 'Video Device: /dev/video' + IntToStr(CountNumber)+ '/' + LineEnding + 'Application Name: ' + CaptureAppName; - Form1.PopupNotifier7.ShowAtPos(NewWidth - 100 , NewHeight div 2 - 550); + Form1.PopupNotifier7.ShowAtPos(NewWidth - 200 , NewHeight div 2 - 550); Form1.TrayIcon5.Hint := 'Camera Status' + LineEnding + 'Camera is Capturing' + LineEnding + CaptureAppName; end; procedure PopUpWebcamHacked; begin Form1.PopupNotifier8.Text := 'Camera is Hacked' + LineEnding + 'Video Device: /dev/video' + IntToStr(CountNumber)+ '/' + LineEnding + 'Check Logs'; - Form1.PopupNotifier8.ShowAtPos(NewWidth - 100 , NewHeight div 2 - 550); + Form1.PopupNotifier8.ShowAtPos(NewWidth - 200 , NewHeight div 2 - 550); Form1.TrayIcon5.Hint := 'Camera Status' + LineEnding + 'Camera is Hacked' + LineEnding + 'Check Logs'; end; procedure PopUpMicHacked; begin Form1.PopupNotifier9.Text := 'Microphone is Hacked' + LineEnding + 'Alsa Driver Changed Status'; - Form1.PopupNotifier9.ShowAtPos(NewWidth - 100 , NewHeight div 2 - 375); + Form1.PopupNotifier9.ShowAtPos(NewWidth - 200 , NewHeight div 2 - 375); Form1.TrayIcon5.Hint := 'Microphone Status' + LineEnding + 'Microphone is Hacked' + LineEnding + 'Check Logs'; end; @@ -267,7 +267,7 @@ end; procedure PopUpWebcamNotCapturing; begin Form1.PopupNotifier6.Text := 'Camera is not Capturing' + LineEnding + 'Video Device: /dev/video' + IntToStr(CountNumber)+ '/'; - Form1.PopupNotifier6.ShowAtPos(NewWidth - 100 , NewHeight div 2 - 550); + Form1.PopupNotifier6.ShowAtPos(NewWidth - 200 , NewHeight div 2 - 550); Form1.TrayIcon5.Hint := 'Camera On' + LineEnding + 'Camera is Enabled, but is not Capturing'; end; @@ -279,14 +279,14 @@ end; procedure PopUpMicOn; begin Form1.PopupNotifier3.Text := 'Microphone is Unmuted' + LineEnding + 'Alsa Driver Status: cap'; - Form1.PopupNotifier3.ShowAtPos(NewWidth - 100 , NewHeight div 2 - 375); + Form1.PopupNotifier3.ShowAtPos(NewWidth - 200 , NewHeight div 2 - 375); Form1.TrayIcon2.Hint := 'Microphone Status & Menu' + LineEnding + 'Microphone is Unmuted'; end; procedure PopUpMicOff; begin Form1.PopupNotifier4.Text := 'Microphone is Muted' + LineEnding + 'Alsa Driver Status: nocap'; - Form1.PopupNotifier4.ShowAtPos(NewWidth - 100 , NewHeight div 2 - 375); + Form1.PopupNotifier4.ShowAtPos(NewWidth - 200 , NewHeight div 2 - 375); Form1.TrayIcon2.Hint := 'Microphone Status & Menu' + LineEnding + 'Microphone is Muted'; end; @@ -351,7 +351,8 @@ begin AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes]; AProcess.Execute; AStringList.LoadFromStream(AProcess.Output); - ShowMessage('Pids List of ' + CaptureAppName + ':' + sLineBreak + AStringList.Text); + ShowMessage( 'Pids List of ' + CaptureAppName + ':' + sLineBreak + + '---------------------------' + sLineBreak + AStringList.Text); j := 0; while j <= AStringList.Count - 1 do @@ -566,40 +567,84 @@ begin end else begin - Form1.MenuItem13.Visible := true; - if Length(Password2) > 0 then - Form1.MenuItem37.Visible := true; + if HasPassword = false then + begin + Form1.MenuItem13.Visible := true; + Form1.MenuItem37.Visible := false; + end + else + begin + Form1.MenuItem13.Visible := false; + Form1.MenuItem37.Visible := true; + end; + + //if Length(Password2) > 0 then + // Form1.MenuItem37.Visible := true; end; end; +procedure NoCapturePassword; +var + MessageStr : string; + BoxStyle : integer; + Reply : integer; + +begin + BoxStyle := MB_ICONEXCLAMATION + MB_OK; + Reply := Application.MessageBox ( 'The Application will catch and will' + sLineBreak + + 'be able to kill, only Users Events.' + sLineBreak + ' ' + sLineBreak + + 'For Better Protection, please provide' + sLineBreak + + 'the sudo password, on the Menu at' + sLineBreak + + 'Camera''s Indicator Menu', 'Camera Control for Linux', BoxStyle); + Form1.MenuItem38.Visible := true; +end; + +procedure PasswordInputQuery; +var + UserString : string; + +begin + if InputQuery('Camera Control for Linux', 'For better functioning, please provide your sudo password', TRUE, UserString) then + begin + HasPassword := true; + Password := UserString; + end + else + begin + //NoCapturePassword; + WantsPassword := false; + Form1.MenuItem38.Visible := true; + HasPassword := false; + Password := ''; + end; + +end; + procedure GetCapturePassword; begin - if (HasPassword = true) and (WantsPassword = true) then + if (HasPassword = false) and (WantsPassword = true) then begin + PasswordInputQuery; S := FpSystem(Concat('echo ', Password, ' | sudo -S sh -c "ls /root"')); if S <> 0 then - AskPassword + begin + WantsPassword := false; + Form1.MenuItem38.Visible := true; + HasPassword := false; + Password2 := ''; + NoCapturePassword; + end else - Password2 := Password; - - WantsPassword := true; - end - else - if (HasPassword = false) and (WantsPassword = true) then - begin - AskPassword; - S := FpSystem(Concat('echo ', Password, ' | sudo -S sh -c "ls /root"')); - if S <> 0 then - begin - ShowMessage('The Application will cath and will be able to kill, only Users Events.' + sLineBreak + 'For Better Protection, please Exit, re-run this application and provide sudo password'); - WantsPassword := false; - end - else - begin - Password2 := Password; - WantsPassword := false; - end; - end; + begin + Password2 := Password; + WantsPassword := false; + Form1.MenuItem38.Visible := false; + HasPassword := true; + ShowMessage( 'Password is Correct' + sLineBreak + + 'Now Kill Capturing (Sudo) is available' + sLineBreak + + 'on the Camera Indicator Menu'); + end; + end; end; procedure TForm1.FormCreate(Sender: TObject); @@ -632,6 +677,7 @@ begin MenuItem37.Visible := false; Password2 := ''; WantsPassword := true; + MenuItem38.Visible := false; LogsStringList.Clear; //Logs.Form3.StringGrid1.Clean; @@ -656,7 +702,7 @@ begin if CamStatus = 0 then // -> Camera is off begin //ImageListCam.GetIcon(1, TrayIcon1.Icon); - PopUpWebcamOff; + //PopUpWebcamOff; ImageListCam1.GetIcon(0, TrayIcon5.Icon); CameraIcon := 0; //ShowMessage('Camera is Off or No Camera exists'); @@ -668,7 +714,7 @@ begin if CamStatus = 1 then // -> Camera is On begin //ImageListCam.GetIcon(0, TrayIcon1.Icon); - PopUpWebcamOn; + //PopUpWebcamOn; ImageListCam1.GetIcon(2, TrayIcon5.Icon); CameraIcon := 2; //ShowMessage('Camera is On'); @@ -680,8 +726,8 @@ begin if CamStatus = 2 then // -> Camera is Capturing begin ActionTime := now; - PopUpWebcamCaptures; - PopUpWebcamCaptStatus := true; + //PopUpWebcamCaptures; + //PopUpWebcamCaptStatus := true; ImageListCam1.GetIcon(1, TrayIcon5.Icon); CameraIcon := 1; VideoCapt := true; @@ -698,7 +744,7 @@ begin MicStatus := true; MicClicked := false; MicClicksCounter:= 0; - PopUpMicOn; + //PopUpMicOn; MicIcon := 0; end; @@ -708,7 +754,7 @@ begin MicStatus := false; MicClicked := false; MicClicksCounter:= 0; - PopUpMicOff; + //PopUpMicOff; MicIcon := 1; PopUpMenu6.Close; end; @@ -779,6 +825,8 @@ procedure AskPassword; begin Password := PasswordBox('Authorization Needed / User Input','Please Enter Password'); HasPassword := True; + + end; procedure TForm1.MenuItem10Click(Sender: TObject); // Exit @@ -820,6 +868,57 @@ begin end; end; +procedure MenuPasswordInputQuery; +var + UserString2 : string; + +begin + if InputQuery('Camera Control for Linux', 'For better functioning, please provide your sudo password', TRUE, UserString2) then + begin + HasPassword := true; + Password := UserString2; + end + else + begin + //NoCapturePassword; + Form1.MenuItem38.Visible := true; + Password := ''; + end; + +end; + +procedure MenuGetCapturePassword; +begin + if (HasPassword = false) then + begin + MenuPasswordInputQuery; + S := FpSystem(Concat('echo ', Password, ' | sudo -S sh -c "ls /root"')); + if S <> 0 then + begin + Form1.MenuItem38.Visible := true; + HasPassword := false; + Password2 := ''; + NoCapturePassword; + end + else + begin + Password2 := Password; + Form1.MenuItem38.Visible := false; + HasPassword := true; + ShowMessage( 'Password is Correct' + sLineBreak + + 'Now Kill Capturing (Sudo) is available' + sLineBreak + + 'on the Camera Indicator Menu'); + end; + end; +end; + +procedure TForm1.MenuItem38Click(Sender: TObject); +begin + if (HasPassword = false) then + MenuGetCapturePassword; + +end; + procedure DeleteOldLogs; // Deletes old Log files var SearchResult : TSearchRec; @@ -1351,6 +1450,15 @@ begin PopUpMenu6.PopUp; end; +procedure TForm1.UniqueInstance1OtherInstance(Sender: TObject; + ParamCount: Integer; + const Parameters: array of String); +begin + ShowMessage ( 'Another instance of Camera Control is running' + sLineBreak + + 'Please close it and then run me again' ); + Halt(0); +end; + procedure CheckEvents; // Check Statuses and External Events Notifications and Logs var HackedTime : TDateTime; @@ -1381,6 +1489,7 @@ begin + RightStr(DateTimeToStr(ActionTime), 8), 'Camera is Off', IntToStr(VideoDevicesNumber)]); AppendLogs; Inc(GridLine); + PopUpWebcamOff; end; if CamStatus = 1 then @@ -1390,6 +1499,7 @@ begin + RightStr(DateTimeToStr(ActionTime), 8), 'Camera is On', IntToStr(VideoDevicesNumber)]); AppendLogs; Inc(GridLine); + PopUpWebcamOn; end; if CamStatus = 2 then @@ -1399,6 +1509,8 @@ begin + RightStr(DateTimeToStr(ActionTime), 8), 'Camera is Captuting, by ' + CaptureAppName, IntToStr(VideoDevicesNumber)]); AppendLogs; Inc(GridLine); + PopUpWebcamCaptures; + PopUpWebcamCaptStatus := true; end; If MicStatus = true then @@ -1408,6 +1520,7 @@ begin + RightStr(DateTimeToStr(ActionTime), 8), 'Microphone is Unmuted', IntToStr(VideoDevicesNumber)]); AppendLogs; Inc(GridLine); + PopUpMicOn; end; If MicStatus = false then @@ -1417,6 +1530,7 @@ begin + RightStr(DateTimeToStr(ActionTime), 8), 'Microphone is Muted', IntToStr(VideoDevicesNumber)]); AppendLogs; Inc(GridLine); + PopUpMicOff; end; FromMain := false;