Блокировка компьютера с внешней кнопки

alhaos
Offline
Зарегистрирован: 27.12.2016

Сделал эту схему так сказать for fun может кому понадобиться практическое применение.

Скетч
const int buttonPin = 10;
const int ledPin =  13;
int buttonState;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    digitalWrite(ledPin, HIGH);
    Serial.println(HIGH);
  } else {
    digitalWrite(ledPin, LOW);
    Serial.println(LOW);
  }
}

Скрипт на Powershell который на компьютере ждет сигнала по порту, и блокирует компьютер, номер порта надо поменять на свой.

while ($true) {
$DelaySeconds=60  
$PORT='COM13'  
$BAUDRATE=9600  
$Parity=[System.IO.Ports.Parity]::None 
$dataBits=8  
$StopBits=[System.IO.Ports.StopBits]::one 
 
  
$period = [timespan]::FromSeconds($DelaySeconds)  
$port= new-Object System.IO.Ports.SerialPort $PORT,$BAUDRATE,$Parity,$dataBits,$StopBits  
$port.Open()  
  
$StartTime = Get-Date  

while ((Get-Date) - $StartTime -lt $period) {   
  $message=$port.ReadLine()  
  if ($message[0] -eq '1')
  {
	& 'rundll32.exe' 'user32.dll,LockWorkStation'
  }
}  
$port.Close()  
}

 

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Не лучше ли эмулировать PS/2 или USB и просто посылать WinKey+L ? Так можно обойтись без скрипта, да и работать будет на любом компе без драйверов USB2COM. Да и комбинаций можно добавить для расширения функционала.

 

alhaos
Offline
Зарегистрирован: 27.12.2016

В данном случае скорее всего лучше, но можно развить данный пример дальше например запускать какю либо программу как рекацию на показания какого либо датчика. В случае с эмулящией клавиатуры можно будет слать только клавиши, а тут можно слать команды, а скрип или приложение будет на них соотвествюще реагировать.

 

 

kakoitotam.dzhiek
Offline
Зарегистрирован: 02.12.2020

Тема старая, но можно подробнее что нужно сделать?

b707
Offline
Зарегистрирован: 26.05.2017

kakoitotam.dzhiek пишет:

Тема старая, но можно подробнее что нужно сделать?

так вроде все и так понятно

kakoitotam.dzhiek
Offline
Зарегистрирован: 02.12.2020

b707 пишет:

так вроде все и так понятно

[/quote]

Я с Powershell ещё дело не имел.

Я вставляю код в Powershell и у меня ошибки.

Исключение при вызове "ReadLine" с "0" аргументами: "Порт закрыт."
строка:17 знак:3
+   $message=$port.ReadLine()
+   ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : InvalidOperationException
 
Не удается индексировать в массив NULL.
строка:18 знак:7
+   if ($message[0] -eq '1')
+       ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray
 
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а виндовс случайно не 64 битная?

rkit
Offline
Зарегистрирован: 23.11.2016

kakoitotam.dzhiek пишет:

 

Исключение при вызове "ReadLine" с "0" аргументами: "Порт закрыт."
строка:17 знак:3
 

kakoitotam.dzhiek
Offline
Зарегистрирован: 02.12.2020

Да, 64

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

видимо:  & 'rundll64.exe' 'user64.dll,LockWorkStation'

И?

Для кнопки на 6 пине замыкаемой на землю:
 

const int buttonPin = 6;
const int ledPin =  13;
int buttonState = 1;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW) {
    digitalWrite(ledPin, HIGH);
    Serial.println(HIGH);
  } else {
    digitalWrite(ledPin, LOW);
    Serial.println(LOW);
  }
}