Windows AutoIt Gestures – управление с жестикулации с мишката

Написах простичка програмка за управление на Windows с мишката. Писана е на AutoIt. Може да се напасне лесно за всякакви команди, като съм оставил възможност за редакция на един ini-файл, който контролира цялата хава.
В момента са добавени 8 базови функции, които се изпълняват от десния бутон на мишката.
Windows Mouse Gestures programming functions

Кратко видео с функционалността може да се види тук:


Целия сорс код на програмата:

#include <Misc.au3>
AutoItSetOption("WinTitleMatchMode", 4)
 
$dll = DllOpen("user32.dll")
$ini = "functions.ini"
$func1 = IniRead($ini,"HotKey","Function1",@WindowsDir&"\system32\calc.exe")
$func2 = IniRead($ini,"HotKey","Function2",@WindowsDir&"\system32\calc.exe")
$func3 = IniRead($ini,"HotKey","Function3",@WindowsDir&"\system32\calc.exe")
$func4 = IniRead($ini,"HotKey","Function4",@WindowsDir&"\system32\calc.exe")
$func5 = IniRead($ini,"Gestures","Function5",@WindowsDir&"\system32\calc.exe")
$func6 = IniRead($ini,"Gestures","Function6",@WindowsDir&"\system32\calc.exe")
$func7 = IniRead($ini,"Gestures","Function7",@WindowsDir&"\system32\calc.exe")
$func8 = IniRead($ini,"Gestures","Function8",@WindowsDir&"\system32\calc.exe")
$funcl1 = IniRead($ini,"Label","Function1",@WindowsDir&"\system32\calc.exe")
$funcl2 = IniRead($ini,"Label","Function2",@WindowsDir&"\system32\calc.exe")
$funcl3 = IniRead($ini,"Label","Function3",@WindowsDir&"\system32\calc.exe")
$funcl4 = IniRead($ini,"Label","Function4",@WindowsDir&"\system32\calc.exe")
$funcl5 = IniRead($ini,"Label","Function5",@WindowsDir&"\system32\calc.exe")
$funcl6 = IniRead($ini,"Label","Function6",@WindowsDir&"\system32\calc.exe")
$funcl7 = IniRead($ini,"Label","Function7",@WindowsDir&"\system32\calc.exe")
$funcl8 = IniRead($ini,"Label","Function8",@WindowsDir&"\system32\calc.exe")
 
While   1
    Sleep ( 500 )
    ToolTip("")
    If _IsPressed("04", $dll) Then ; Moje da se smeni s drug buton na mishkata
        $ori = MouseGetPos()
            SplashImageOn("","gdot.bmp","30","30",$ori[0]-15,$ori[1]-15,1)
        Do
            Sleep(100)
        $cur = MouseGetPos()
        If $ori[0] - $cur[0] > 100 And  $ori[1] - $cur[1] > 100  Then
            ToolTip($funcl1)
        ElseIf $ori[0] - $cur[0] < -100 And  $ori[1] - $cur[1] > 100  Then
            ToolTip($funcl2)
        ElseIf $ori[0] - $cur[0] > 100 And  $ori[1] - $cur[1] < -100  Then
            ToolTip($funcl3)
        ElseIf $ori[0] - $cur[0] < -100 And  $ori[1] - $cur[1] < -100  Then
            ToolTip($funcl4)
        ElseIf $ori[0] - $cur[0] > 50 Then
            ToolTip($funcl5)
        ElseIf $ori[0] - $cur[0] < -50 Then
            ToolTip($funcl6)
        ElseIf $ori[1] - $cur[1] > 50 Then
            ToolTip($funcl7)
        ElseIf $ori[1] - $cur[1] < -50 Then
            ToolTip($funcl8)
        Else
            ToolTip("")
        EndIf
 
        Until Not(_IsPressed("04", $dll));Moje da se smeni s drug buton na mishkata
        $cur = MouseGetPos()
 
    	If WinActive("classname=ExploreWClass") Or WinActive("classname=CabinetWClass") Then
 
        	If $ori[0] - $cur[0] > 100 And  $ori[1] - $cur[1] > 100  Then ; Nagore i naliavo - Back
            	Send($func1)
        	ElseIf $ori[0] - $cur[0] < -100 And  $ori[1] - $cur[1] > 100  Then ; Nagore i nadiasno - Forward
            	Send($func2)
        	ElseIf $ori[0] - $cur[0] > 100 And  $ori[1] - $cur[1] < -100  Then ; Nadolu i nalqwo - Minimize
            	Send($func3)
        	ElseIf $ori[0] - $cur[0] < -100 And  $ori[1] - $cur[1] < -100  Then ; Nadolu i nadiasno - Close
            	Send($func4)
 
			ElseIf $ori[0] - $cur[0] > 50 Then ; Naliavo - My Docu
            	ShellExecute($func5)
        	ElseIf $ori[0] - $cur[0] < -50 Then ; Nadiasno - Disc D:\
            	ShellExecute($func6)
        	ElseIf $ori[1] - $cur[1] > 50 Then ; NAGORE - Calculator
            	ShellExecute($func7)
        	ElseIf $ori[1] - $cur[1] < -50 Then ; NADOLU - Notepad
            	RShellExecute($func8)
			EndIf
		Else
 
			If $ori[0] - $cur[0] > 50 Then ; Naliavo - My Docu
            	Run($func5)
        	ElseIf $ori[0] - $cur[0] < -50 Then ; Nadiasno - Disc D:\
            	Run($func6)
        	ElseIf $ori[1] - $cur[1] > 50 Then ; NAGORE - Calculator
            	Run($func7)
        	ElseIf $ori[1] - $cur[1] < -50 Then ; NADOLU - Notepad
            	Run($func8)
        	Else
            	SplashTextOn("Gestures","No action","250","20","-1","-1",2,"","","")
            	Sleep(500)
            	SplashOff()
        	EndIf
 
		EndIf
 
        SplashOff()
    EndIf
WEnd
DllClose($dll)

За да се промени функционалността на жестикулациите, трябва да се редактира секцията “Gestures” във файла functions.ini:

[HotKey]
Function1 = !{LEFT}
Function2 = !{RIGHT}
Function3 = !{SPACE}N
Function4 = !{F4}
 
[Gestures]
Function5 = explorer.exe C:\
Function6 = explorer.exe D:\
Function7 = calc.exe
Function8 = Notepad.exe
 
[Label]
Function1 = Back
Function2 = Forward
Function3 = Minimize
Function4 = Close Explorer
Function5 = Disk C
Function6 = Disk D
Function7 = Calculator
Function8 = Notepad

Секцията “Hot Key” също може да се редактира. Информация за командите в AutoIt тук:
Затварянето или временната пауза на програмата става от тук: HotKey-help.html
Windows Gestures - Stop or Pause
Изтегляне за 32bit Windows: Windows AutoIt Gestures – 32bit
Изтегляне за 64bit Windows: Windows AutoIt Gestures – 64bit

MS Word search strings – търсене на думи в Word файлове

Проста програмка за търсене на думи в MS Word файлове. Програмата е само за 32-bit Windows. Тествана е само под WinXP, но може би ще работи и под други OS.
Писана само за трнировка. Разполага само с базови възможности. Би могло да и се добавят доста повече опции, като рекурсивно преравяне на директории, търсене на кирилица, търсене с регулярни изрази, запазване на резултата в текстов файл и т.н. Към момента ги няма тия дивотии, но ако ми текне музата някой ден може и да я пооправя. Използвал съм 2 езика за програмиране – AutoIt и Perl. Използвах компилатор-пакетера pp, за да компилирам Perl-файла.

Програмата е с отворен код и ако на някой му се занимава, може да си я пипне. Изглежда така:
MS Word Search
Сорс кода:
AutoIt-файла

#include 
#include 
#include 
#include 
#include 
#include 
 
Local $line
 
$Form1 = GUICreate("Search in word files", 621, 473, 192, 124)
$Label2 = GUICtrlCreateLabel("Text to Find", 8, 13, 60, 23)
$Rezult = GUICtrlCreateEdit("", 8, 64, 609, 369)
; GUICtrlSetData(-1, "Edit1")
$String = GUICtrlCreateInput("", 80, 8, 393, 21)
$SelectDir = GUICtrlCreateButton("Select Dir", 8, 32, 65, 25)
$Directory = GUICtrlCreateInput("", 80, 32, 393, 21)
$Search = GUICtrlCreateButton("SEARCH", 480, 8, 137, 49)
$Help = GUICtrlCreateButton("?", 584, 440, 25, 25)
$Label1 = GUICtrlCreateLabel("--==[ Programming by Nedialko Voinigovski ]==--", 8, 448, 444, 17)
GUISetState(@SW_SHOW)
 
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $SelectDir
			_seldir()
		Case $Search
			_search()
		Case $Help
			_help()
	EndSwitch
WEnd
 
 
func _seldir()
	$outfolder = FileSelectFolder("Choose a folder.", "")
	GUICtrlSetData($Directory, $outfolder)
EndFunc
 
func _search()
$command = @comspec &amp; ' /c ws.exe' &amp; ' "' &amp; GUICtrlRead($String) &amp; '"' &amp; ' "' &amp; GUICtrlRead($Directory) &amp; '"'
$cmd = Run($command, @WorkingDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
 
	$line = "Wait ..." &amp; @CRLF
	While 1
		$line &amp;= StdoutRead($cmd)
		If @error &lt;&gt; 0 Then ExitLoop
		Sleep(1000)
		GUICtrlSetData($Rezult, $line)
	WEnd
	$line &amp;= "--------------------------" &amp; @CRLF &amp; "All done!"
	GUICtrlSetData($Rezult, $line)
EndFunc
 
func _help()
	MsgBox(0,"HELP","Програмата е комбинация от езиците за програмиране" &amp;@CRLF&amp; "AutoIt (за графичната част) и Perl (за ровичкането в Word-файловете)." &amp;@CRLF&amp;"Има възможност да се използват PCRE (perl регулярни изрази) за търсене в файловете, но " &amp;@CRLF&amp;"все още липсва добра поддръжка на кирилица."&amp;@CRLF&amp;@CRLF&amp;"За да работи всичко нормално трябва и двете exe-та да са в една директория.")
EndFunc

Perl-файла, който върши съществената работа:

use Win32::OLE;
use Win32::OLE::Enum;
use Cwd 'abs_path';
 
$dir = $ARGV[1]; chdir $dir;
@files = &lt;*.doc *.docx&gt;;
$find = $ARGV[0];
 
 
 
foreach $file (@files) {
	$doc = Win32::OLE -&gt; GetObject(abs_path($file));
	open (FH,"&gt;jgfd75w43589azwq210");
 
	$paragraphs = $doc-&gt;Paragraphs();
	$enumerate = new Win32::OLE::Enum($paragraphs);
	while(defined($paragraph = $enumerate-&gt;Next())){
		$text = $paragraph-&gt;{Range}-&gt;{Text};
		print FH "$text\n";
	}
	$doc-&gt;Close;
	close FH;
 
	open (FH,"&lt;jgfd75w43589azwq210");
	while ($line = ) {
		if($line =~ m/$find/i){
			print "$find\t--&gt;\t$ARGV[1]\\$file\n";
			last;
		}
	}
	close FH;
	unlink("jgfd75w43589azwq210");
}

Пакетите за Perl, които ми бяха необходими за компилирането:

gcc environment - 3.4.5 (mingw-vista special r3)
PAR Packager, version 1.009 (PAR version 1.002)

Компилирането на Perl стана елементарно. Просто написах в промпта:

pp search_in_word.pl

Програмата може да се изтегли от тук: MS Word Search

Ohm Calculator за реотани на електронни цигари на Excel

Проста програмка на Excel за изчисляване на съпротивлението на coil-а за изпарител на електронна цигара.
Най-интересното във файла е, че съм използвал именувани полета, за да създам нещо като база данни от която се извличат данните.
Ohm Calculator Excel - e-cigarette
Файла може да се изтегли от тук: Ohm Calculator – e-cigarette

Blender Perpendicular Camera

Търсих си готов файл за Blender 3D с перпендикулярна камера, спрямо обект. Не намерих и реших да си направя сам такава сцена, защото в някои случаи ми се иска да рендвам изглед точно срещу (перпендикулярно над) обекта:
Blender_Camera_Perpendicular
Ето примерната сцена в която ренднах някакви обръчи:
Blender_perpendicular_camera

Файла може да се изтегли от тук: Blender – Perpendicular Camera

PHP-file UTF-8 encoding

Попаднах на стар хостинг (с php 5.2.3), който прецаква енкодинга при ъплауд на php-файлове. Изключително досаден проблем. Пробвах да вкарвам разни дивотии в .htaccess, но нищо не помогна. Ей такива неща опитах:

AddDefaultCharset utf-8
AddCharset utf-8 .php
DefaultLanguage en-US

Единствения шанс, който ми остана беше да накарам интерпретатора да каже на сървара, че файла трябва да се излъчи в UTF-8 encoding. По-долния код се поставя преди рендването на съдържанието:

<?php header('Content-Type: text/html; charset=utf-8'); ?>

Доста удобно за моя стил на програмиране :).